动态分配的字符串填充了字符,结果为空字符串C.

And*_*rty 1 c memory string malloc

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,我可以打印每个单个字符(例如printf("%c",*(--c));),但是当我尝试使用printf("%s",c);该程序打印整个字符串时,什么都不打印!为什么会这样?

Jay*_*Jay 6

指针已被移动.所以它现在指向最后一个字符"\ 0".所以什么都没有打印出来.保留另一个变量中的指针并尝试使用它进行打印.然后它将正确打印.

尝试如下:

int main()
{
    char *p;
    char *c=(char*)malloc(4*sizeof(char));
    p = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",p);
    free(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)