用字符填充的动态分配字符串结果为空字符串C


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

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

指针已被移动。所以它现在指向最后一个字符,也就是""。所以,什么都没有打印。将指针保留在另一个变量中,并尝试使用该变量进行打印。这样就可以正确打印了。

尝试如下:

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

您已将c增加到最后一个字符''…所以没有什么可打印的

你可以把你的代码改成:

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

int main(){
    char *c = (char*)malloc(4 * sizeof(char));
    c[0] = 'a';
    c[1] = 'b';
    c[2] = 'c';
    c[3] = '';
    printf("%s", c);
    free(c);
    return 0;
}

c是pointer,因此表达式c++;改变了指针的位置。调用c++ 3次后,最终c指向。为了解决这个问题,创建一个临时指针来遍历元素。你的程序也有内存泄漏。不要忘记free的记忆!

因为您的字符串现在指向分配字符串中的最后一个字符。试试

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    char* temp = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='';
    printf("%s",c); // as a result of ++ operator, your pointer is no longer point at the beginning of string
    printf("%s,temp"); // << This will print whole string as it still pointed to the first address of the string
    free(temp);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新