我从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/