我有以下代码在我初始化的行崩溃ch:
char * p = "Test";
char ch = *p++;
printf("Here : %s\n%c", p, ch);
Run Code Online (Sandbox Code Playgroud)
但是以下代码没有问题:
char * p = "Test";
char ch = *p++;
ch++;
printf("Here : %s\n%c", p, ch);
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,您正在尝试更改T编译到程序中的"Test"字符串,该字符串保存在您的代码无意更改的内存部分中(通常;在某些允许的情况下允许更改) ,但通常不是).这是因为(*p)++手段(松散地说) *p = *p + 1(例如,获取指向的字符p,增加它并将其写回),当然,*p指向编译的"测试".
你的第二个版本不存在这样的问题,因为你是递增ch,您都允许更改.事实上,你的第二个版本实际上增加了两个不同的东西; 首先它char ch = *p++;检索字符*p然后递增p(现在它指向"测试"中的"e"),然后你这样做ch = ch++.(你可能只是在ch++;那里,因为++它直接在它的操作数上运行.)
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |