看看这个:
int main() {
char *verse = "zappa";
printf("%c\n", *verse);
// the program correctly prints the first character
*verse++;
printf("%c\n", *verse);
// the program correctly prints the second character, which in fact lies
// in the adjacent memory cell
(*verse)++;
printf("%c\n", *verse);
// the program doesn't print anything and crashes. Why?
return 0;
}
为什么我的程序崩溃,因为我尝试增加verse指向的值?我期待像ASCII表格中的下一个字符。
答案 0 :(得分:10)
此行(*verse)++;
修改字符串文字。这是未定义的行为。
请注意,较早的代码行*verse++
被解析为*(verse++)
答案 1 :(得分:3)
kendo.aspnetmvc.min.js
指向字符串文字,您不允许修改。尝试:
verse
现在您的代码将起作用,因为char verse1[] = "zappa";
char *verse = verse1;
是一个可修改的字符串。
请注意,verse1
实际上仅相当于*verse++
。间接返回指针在增量之前指向的值,但由于你没有对表达式的返回值做任何事情,所以间接并没有真正做任何事情。