使用 C 分段错误的字符串操作



>我正在尝试运行一个程序,该程序将从字符串中选择第二个单词。 每次我尝试运行该程序时,它都会向我显示分段错误。

#include<stdio.h>
#include<string.h>
// Read only region start
char* secondWordUpperCase(char* input1)
{
// Read only region end
// Write code here
int len,i,j,k,pos=0;
char *str;
len=strlen(input1);
str= malloc(len+1);
for(i=0;i<len;i++){
if(*(input1+i)==" ")
{
pos=i+1;
}
}
for(i=pos;*(input1+i)!=" ";i++)
{
*(str+i)=*(input1+i);
}
*(str+(i+1))="";
return str;
}

我在 mettl 在线编译器上运行这个程序,所以我没有驱动程序代码。 谁能指导我犯的错误,这对我有很大的帮助,因为我是一个新手。

发生崩溃是因为您要查找" "(具有单个空格的字符串文本(而不是' '(空格的字符文本(。此外,在第二个循环中从pos开始i会使初始pos-1字符未初始化。如果要修剪空格,请使用以下循环:

for (i=0 ; *(input1+i) != ' ' ; i++) {
*(str+i)=*(input1+pos+i);
}

您正在与要与字符进行比较的指针进行比较。

if(*(input1+i)==" ")

->

if(*(input1+i)==' ')

当输入只有一个或两个单词时,第二个循环可能会经过输入缓冲区(并导致缓冲区溢出(。事实上,第二个循环只会在下一个空间停止,这在这两种情况下是不存在的。

此外,您可能希望在 str 的开头写入检测到的第二个单词,因此不分配给 *str 而不是 *(str+1(。

最后,两个循环中的测试将字符与指向字符串 " 的指针进行比较。这些不会导致分段错误,但可能不是预期的行为。

相关内容

  • 没有找到相关文章

最新更新