如果我将一个字符串文字分配给a char*,即使使用了许多迂腐选项(-Wall -W -pedantic -std=c99),GCC和Clang都不会抱怨:
char *foo = "bar";
Run Code Online (Sandbox Code Playgroud)
而他们(当然)不要抱怨,如果我分配const char*到char*.
这是否意味着字符串文字被认为是char*类型?他们不应该const char*吗?如果它们被修改,它就不是定义的行为!
和(一个不相关的问题)命令行参数(即:):argv它被认为是一个字符串文字数组?
我试图扭转一个字符串到位.
void reverseStr(char *str)
{
int i;
int length;
int last_pos;
length = strlen(str);
last_pos = length-1;
for(i = 0; i < length / 2; i++)
{
char tmp = str[i];
str[i] = str[last_pos - i];
str[last_pos - i] = tmp;
}
}
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400893 in reverseStr (str=0x400974 "Haus") at main.c:102
102 str[i] = str[last_pos - i];
(gdb) print i
$1 = 0
(gdb) print last_pos
$2 = 3
(gdb) print str
$3 = 0x400974 …Run Code Online (Sandbox Code Playgroud)