在下面的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;
答案 0 :(得分:2)
我认为您对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
答案 1 :(得分:1)
newstring += value
您正在以非法的方式追加字符串,您实际在做的是更改未初始化的指针,因此您将更改地址移至另一个无效地址。
首先,您应该有一些空间,您可以使用
存储新字符串char newstring[64];
然后通过
附加一个字符newstring[j] = tempfullstring[i];
这不会附加NUL终止字符,您必须手动将其添加到结尾或使用其他方法(例如使用strncat
并直接从原始字符串追加:
strncat(newstring+j, tempfullstring+i, 1);
答案 2 :(得分: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;