C打印时出现分段错误
在下面的printf()语句中,我得到一个分段错误:11.没有它,我没有得到任何错误,但我希望能够看到正确的值在newstring值。我如何去做这件事?C打印时出现分段错误
char* newstring;
for(int i = 0; i < len; i++)
{
printf("value %d\n", tempfullstring[i]);
if (tempfullstring[i]>=97 && tempfullstring[i] <=122)
{
char value = tempfullstring[i];
newstring += value;
}
}
printf("The new string is %s", newstrng);
return 0;
我想你的C字符串是如何工作的一个误区:
- 他们不获得的声明中初始化(所以
char* newstring;
必须单独分配,或者你得到了一个未定义的行为) - 他们不能用
+=
运算符连接(这样newstring += value;
无效)需要 - 空间为C字符串被明确管理(所以你将需要在自动存储区中分配您的
newstring
,或者在末尾添加free
)。
固定程序的最简单的方法是猜测newstring
是要去多久可以了,使用strcat
将数据追加到它:
char newstring[1000]; // some max length
newstring[0] = '\0'; // make it an empty string
...
strcat(newstring, value); // instead of newstring += value
'newstring + = value'是有效的,它不会做OP认为它做的事情。 – 2013-02-19 18:02:40
@WilliamPursell这就是为什么我说它不会连接,而不是将它称为无效:) – dasblinkenlight 2013-02-19 18:04:43
我理解非常感谢:) – user1840255 2013-02-19 18:54:58
newstring += value
要附加到一个字符串以非法的方式,你实际上在做什么是改变一个未初始化的指针,,所以你正在改变地址到另一个无效的地址,而不是。
您应首先,有一些房间,里面有你要的新的字符串,存储与
char newstring[64];
,然后通过做
newstring[j] = tempfullstring[i];
此次荣获”追加一个字符t追加NUL终止字符,您必须手动将其添加到末尾或使用其他方法(例如使用strncat
并直接从原始字符串追加:
strncat(newstring+j, tempfullstring+i, 1);
这是您想要使这项工作的代码。
char* newstring = malloc (sizeof(char)*len+1); // this will be worst case (all are >=97 o <=122
int j=0;
for(int i = 0; i < len; i++)
{
printf("value %d\n", tempfullstring[i]);
if (tempfullstring[i]>=97 && tempfullstring[i] <=122)
{
char value = tempfullstring[i];
newstring[j]= value;
j++;
}
}
newstring[j]='\0';
printf("The new string is %s", newstrng);
return 0;
哪个printf()行有问题?什么是tempfullstring的内容?你能给我们更多*有用的*代码吗? – Mido 2013-02-19 18:02:07
在您的printf语句中,newstring拼写错误(“newstrng”)。我不确定这是否是您的帖子的本地输入错误,或者它是否反映了您的实际代码。 – Tebc 2013-02-19 18:02:20