c - 用字符填充的动态分配的字符串导致空字符串 C

标签 c string memory 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;
}

使用此代码我可以打印每个字符(例如 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/

相关文章:

C编程Trie树堆缓冲区溢出

python - python 中的 MemoryError 分块上传

c - 在C中读取文本文件,将行分成多个变量

c++ - 字符串函数的奇怪问题

c# - 字符串到货币格式,没有句点(或逗号)

c++ - 如何在 C++ 和归并排序中比较字符串

c - 是否可以使用 C 语言访问 DRAM 位单元?

c - 将字节数组从 NodeJS 发送到 C 库

c - 我应该在哪里执行包含 #include <xdevcfg.h> 和 xil_printf 的代码?

c - 具有多个参数的函数指针