[英]C Segmentation fault error on print
在下面的printf()语句代码中,我得到了一个分段错误:11。没有它我没有得到任何错误,但我希望能够看到正确的值在newstring值中。 我该怎么做呢?
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;
无效) 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
您正在以非法方式附加到字符串,您实际在做的是更改未初始化的指针, 因此您将更改地址移动到另一个无效地址 。
首先,您应该有一些空间来存储新的字符串
char newstring[64];
然后通过执行追加角色
newstring[j] = tempfullstring[i];
这不会附加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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.