在字符串中查找最后一个单词的长度时出现段错误

Seg Fault When Finding Length Of Last Word In A String

提问人:PapaPumpkin 提问时间:11/13/2023 最后编辑:PapaPumpkin 更新时间:11/13/2023 访问量:42

问:

尝试运行此代码时,我不断遇到 seg 错误,其目的是查找字符串中最后一个单词的长度。知道可以改进的地方吗? scanf 输入只是一个末尾带有标点符号的句子。

#include<stdio.h>
#include<string.h>

void clearBuffer();
void chomp(char word[]);
int lastWordLength(char word[]);

int main(){

    int x;

    char firstSen[500];
    printf("Enter a sentence: ");
    fgets(firstSen, sizeof(firstSen), stdin); 
    clearBuffer();
    x = lastWordLength(firstSen);
    printf("Length of last word in \"%s\" is %d.",firstSen,x);

    return 0;
}

void clearBuffer()
{
    while(getchar() != '\n');
}

void chomp(char word[])
{
    if(word[strlen(word)-1] == '\n')
    {
          word[strlen(word)-1] = '\0';
    }
}

int lastWordLength(char word[])
{
    int i;
    int x;
    while(word[strlen(word)-i] != ' ')
    {
        x += 1;
        i += 1;
    }
    
    return x;
}
c 字符串 分段错误

评论

2赞 Weather Vane 11/13/2023
这不会输入一个句子:只输入一个单词(第一个空格之前的字符)。所以永远找不到空间。考虑输入 with 或 with format spec 。scanf("%s", firstSen);while(word[strlen(word)-i] != ' ')fgets()%499[^\n]
1赞 Weather Vane 11/13/2023
根据定义,在第一个空格字符处停止扫描。这就是它的作用。但是您仍然需要只用一个词来处理这种情况(没有空格)。一些简单的调试(打印输入字符串)就会发现这一点。%s
1赞 Weather Vane 11/13/2023
请考虑使用 来解析输入字符串。strtok()
2赞 Weather Vane 11/13/2023
请不要进行滚动更新以显示代码进度。如果您有其他问题,请提出。
2赞 500 - Internal Server Error 11/13/2023
x并且未初始化 - 可能还存在其他问题。ilastWordLength

答:

-1赞 PapaPumpkin 11/13/2023 #1

此 scanf(“%s”, firstSen);不输入句子:只输入一个单词(第一个空格之前的字符)。所以 while(word[strlen(word)-i] != ' ') 永远不会找到空格。考虑使用 fgets() 或格式规范 %499[^\n] 输入。– 风标

评论

0赞 Community 11/13/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。