C字符指针算法

Swa*_*rma 1 c pointers

我有以下代码在我初始化的行崩溃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.J*_*der 5

在第一种情况下,您正在尝试更改T编译到程序中的"Test"字符串,该字符串保存在您的代码无意更改的内存部分中(通常;在某些允许的情况下允许更改) ,但通常不是).这是因为(*p)++手段(松散地说) *p = *p + 1(例如,获取指向的字符p,增加它并将其写回),当然,*p指向编译的"测试".

你的第二个版本不存在这样的问题,因为你是递增ch,您允许更改.事实上,你的第二个版本实际上增加了两个不同的东西; 首先它char ch = *p++;检索字符*p然后递增p(现在它指向"测试"中的"e"),然后你这样做ch = ch++.(你可能只是在ch++;那里,因为++它直接在它的操作数上运行.)