我不明白为什么当我尝试使用任何字符串函数来处理字符指针变量时,总是会出现分段错误。我完全清楚fgets()函数可以更好地确保不会发生覆盖,但我只是想编写一个程序来演示字符串函数实际上如何覆盖内存地址中的数据,而重新声明指针变量,即pValues = "New Name",将指向完全不同的一组地址(其中包含所需的字符)。
我充分知道字符串函数似乎可以与指针常量一起工作,例如在这种情况下定义:
char values[ ] = "Name Here";
但是,为什么它们不适用于指针变量,即在这样定义时:
char *pValues[ ] = "Name Here";
这是一直出现问题的部分...
#include <stdio.h>
#include <string.h> // required for strcpy(), strcat(), strlen()
main()
{
char *pName = "Peter Jones";
printf("The string pName is \'%s\'\n\n", pName);
// Now lets change it to a longer string with more litterals...
pName = "Dragons Den is GREAT!";
printf("\nThe string pName is %s\n", pName);
puts("Please enter a new string for pName ");
gets(pName);
printf("pName is now %s\n", pName); // THIS PRODUCES SEGMENTATION FAULT
return 0;
}
我正在学习的书中没有提到动态内存或堆 - 我还没有学过这个。
pName
指向不能进行写操作的某个位置:字符串字面值。 - pmggets
函数,因为它是一个基本上不安全的函数,而且已经被弃用了。 - Christian Gibbonschar *pValues[ ]= "Name Here" ;
这行代码会给你什么结果? - Andrew Henlegets()
的故障,但没有使用strcat()
、strcpy()
或scanf()
。使用其中一个函数失败并不意味着它们所有的函数都会以类似的方式失败。 - Code-Apprentice