#include<stdio.h>
void foo(char *mystr)
{
int a;
/*code goes here*/
#ifdef CHECK
int local_var;
printf(" strings address %p\n",mystr);
printf("local variables address %p \n",&local_var);
puts("");
puts("");
#endif
return;
}
int main()
{
char a[]="hello";
char *b="hello";
foo(a);
foo(b);
foo("hello");
}
При компиляции с помощью gcc -DCHECK prog_name.c и выполнении на моем компьютере с Linux выдается следующий вывод ...
strings address 0xbfdcacf6
local variables address 0xbfdcacc8
strings address 0x8048583
local variables address 0xbfdcacc8
strings address 0x8048583
local variables address 0xbfdcacc8
для первого случая, когда строка определена и инициализирована «правильным способом c для изменяемых строк», разница между адресами составляет 0x2E (5 байт).
во втором случае, когда строка определена как char * p = "hello", различия в адресах
0xB7D82745.Это больше, чем размер моего стека. Поэтому я почти уверен, что строка не находится в стеке. Поэтому единственное место, где вы можете найти ее, это раздел .rodata.
Третий аналогичный случай
PS: Как упоминалось выше, это не переносимо, но первоначальный вопрос вряд ли оставляет место для переносимости, упоминая .rodata :)