中最长的单词及其长度

中最长的单词及其长度

我从C语言开始,通过一个自动检查我所写代码的平台来学习(例如,它给了我一些任务,在上传代码之后,它会检查我所写的代码是否产生有意义的结果)。
到目前为止一切都很好,但是我遇到了一个问题,在我看来我已经解决了,但是在上传代码并运行它之后,出现了一个错误,我坦率地说我不明白。
任务:打印句子中最长的单词及其长度。
我的尝试:

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

int main()
{
    char str[80], word[80];
    fgets(str, 80, stdin);

    char *token;

    //tokenizing array str
    token = strtok(str, " ");


    while( token != NULL )
    {
        if(strlen(word) < strlen(token) )
        {
            strcpy(word, token);
        }

        token = strtok(NULL, " ");

    }

    printf("%s %d", word, strlen(word));




    return 0;

}

例如,如果一个人写
hello my name is jacksparrowjunior goodbye

一个人得到
jacksparrowjunior 17

错误在于:
TEST
PASSED
==20760== Conditional jump or move depends on uninitialised value(s)
==20760==    at 0x4006B9: main (004799.c:18)
==20760==  Uninitialised value was created by a stack allocation
==20760==    at 0x400660: main (004799.c:6)
==20760==
==20760== Conditional jump or move depends on uninitialised value(s)
==20760==    at 0x4006E5: main (004799.c:18)
==20760==  Uninitialised value was created by a stack allocation
==20760==    at 0x400660: main (004799.c:6)
==20760==

我注意到的另一件事是如果我改变
char str[80], word[80];
        fgets(str, 80, stdin);


char str[1000], word[1000];
        fgets(str,1000, stdin);

在我的计算机上运行程序后,我得到一个错误。

最佳答案

根据给定的数据,如果不进行测试,我想您应该将str和word初始化为

[...]
char str[80] = "";
char word[80] = "";
fgets(str, 80, stdin);
[...]

关于c - C:打印字符串中最长的单词及其长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40831547/

10-12 05:03