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;
}

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

最佳答案

指针已移动所以它现在指向最后一个字符,即“\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;
}

关于c - 动态分配的由字符填充的字符串将导致空字符串C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39142074/

10-10 00:58
查看更多