我的代码可以正常编译,但是我的代码的第二个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/