我的代码编译良好,但是我的代码的第二个 printf 无法打印。
#include<stdio.h>
int main()
{
char * const p="pointerconstant";
printf("%s",p);
*p='B';
printf("\n%s",p);
}
当我运行以下程序时,它将输出。
pointerconstant
pointerconstant
但应该如此。
pointerconstant
Bointerconstant
这是什么问题?
答案 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 ++