在我的代码中,第二个printf没有打印任何值

时间:2019-02-13 08:34:14

标签: c

我的代码编译良好,但是我的代码的第二个 printf 无法打印。

#include<stdio.h>

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

    printf("%s",p);

    *p='B';

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

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

pointerconstant
pointerconstant

但应该如此。

pointerconstant
Bointerconstant

这是什么问题?

2 个答案:

答案 0 :(得分:3)

我认为您的问题很相似:https://stackoverflow.com/a/7547849/5809736

从@bdonlan输入您的代码: 请注意,如果执行此操作,它将起作用:

    char p[] = "pointerconstant";
    printf("first=%s",p);
    *p='B';
    printf("\nsecond=%s",p);

这是因为我们正在初始化一个非常量字符数组。尽管语法看起来很相似,但是编译器对它的处理方式有所不同。

答案 1 :(得分:0)

在这一行

dict

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

*p='B';

结果是:

  

first = pointerconstant

     

second = Bointerconstant

顺便说一句,我认为将#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 } 写为*p = 'B';会更惯用,但这当然取决于你。


注意:这个答案是用C语言编写的,该问题也被标记为C ++