当我运行我的程序时,我不断收到错误分段错误(核心转储)。
#include<stdio.h>
#include<stdlib.h>
int nextword(char *str);
int main(void)
{
char str[] = "Hello! Today is a beautiful day!!\t\n";
int i = nextword(str);
while(i != -1)
{
printf("%s\n",&(str[i]));
i = nextword(NULL);
}
return 0;
}
int nextword(char *str)
{
// create two static variables - these stay around across calls
static char *s;
static int nextindex;
int thisindex;
// reset the static variables
if (str != NULL)
{
s = str;
thisindex = 0;
// TODO: advance this index past any leading spaces
while (s[thisindex]=='\n' || s[thisindex]=='\t' || s[thisindex]==' ' )
thisindex++;
}
else
{
// set the return value to be the nextindex
thisindex = nextindex;
}
// if we aren't done with the string...
if (thisindex != -1)
{
nextindex = thisindex;
// TODO: two things
// 1: place a '\0' after the current word
// 2: advance nextindex to the beginning
// of the next word
while (s[nextindex] != ' ' && s[nextindex] != '\0')
nextindex++;
str[nextindex] = '\0';
nextindex++;
}
return thisindex;
}
程序的目标是将字符串str []中的每个单词打印到新行的控制台上。我是一个初学程序员,这是一个作业,所以我必须使用这种格式(不允许使用字符串库)。我只是想知道我哪里出错了以及如何解决它。
答案 0 :(得分:1)
嗯,我之前在另一个问题中看过这个节目...... Function that reads each word in a string and prints each word on different line with C
你的循环中有错误:
while (s[nextindex] != ' ' || s[nextindex] != '\0')
使用&&
,而不是||
。该循环将永远不会终止,因为这两个条件中的至少一个将始终为真。
然后你必须修复你的另一个问题(未能检测到字符串结尾)。这样就可以了:
if( str[nextindex] != 0 ) {
str[nextindex] = '\0';
nextindex++;
} else {
nextindex = -1;
}
答案 1 :(得分:0)
我无法遵循您的代码逻辑,但首先,
i = nextword(NULL);
在你的主循环中的将无法实现。你的意思是迭代你删除了一个单词的字符串的其余部分吗?