我的代码可以正常编译,但是我的代码的第二个printf无法打印。

#include<stdio.h>

int main()
{
    char * const p="pointerconstant";

    printf("%s",p);

    *p='B';

    printf("\n%s",p);
}


当我运行以下程序时,它输出..

pointerconstant
pointerconstant


但这应该是..

pointerconstant
Bointerconstant


这里有什么问题?

最佳答案

在这条线

*p='B';


您正在尝试修改指针指向的char数组的第一个字节。这是行不通的,因为那是程序二进制文件的只读部分。通过将其复制到堆栈或堆中进行修复:

#include<stdio.h>
#include<string.h>

int main()
{
    char * const p = strdup("pointerconstant"); // string is copied to the heap
    printf("first=%s", p);
    *p = 'B';
    printf("\nsecond=%s", p);
    free(p); // copy of the string on the heap is released again
    return 0; // 0 indicates that the program executed without errors
}


结果是:


  first =指针常量
  
  second = Bointerconstant


顺便说一句,我认为将*p = 'B';编写为p[0] = 'B';会更加习惯,但这当然取决于您。



注意:此答案在C语言中,问题也被标记为C ++

关于c - 在我的代码中,第二个printf没有打印任何值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54665684/

10-11 20:58