我一直致力于一个c程序,它允许用户输入文本行,直到他们在一行上输入短语“The end”。该程序将使用字符串“was”替换每次出现的“is”并计算所做的更改次数。
到目前为止,我已经编写了一些代码但是我对如何使其正常工作有点迷失,因为现在程序正在给我一个缓冲区溢出错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char str[500];// ="- This, a sample string.";
char * pch;
char endTerm[5000];
printf("Enter a string to parse: ");
scanf("%[^\n]",str);
strcat(endTerm, str);
while ( (strcmp(str, "the end")) != 0 || (strcmp(str, "the end.")) != 0 )
{
scanf("%[^\n]",str);
strcat(endTerm, str);
}
printf ("Your original string was: %s\n\n",endTerm);
pch = strtok (endTerm," ,-");
while (pch != NULL)
{
if ((strcmp(pch, "is")) == 0)
{
pch = "was";
}
else if ((strcmp(pch, "is.")) == 0)
{
pch="was.";
}
printf ("%s ",pch);
pch = strtok (NULL, " ,-");
}
printf("\n\n");
return 0;
}
如果用户输入结尾,我可能会弄清楚如何结束程序,但我真的需要帮助更换单词is is。
答案 0 :(得分:0)
正如其他人在上述评论中指出的那样,您的计划存在一些缺陷。
strcat
函数。如果您阅读文档,您将理解strcat
将第一个参数视为目标指针,因此希望用户将足够的内存(足以保存连接的字符串)分配给目标指针。在你的情况下,你传递一串&#34; &#34;只能容纳1个字符。这就是你得到缓冲区溢出或分段错误的原因。 strcmp
函数。当两个字符串相等时,此函数返回0(由false
定义而不是true
中的strbool.h
)。 strtok
。您需要传递NULL作为第二个调用的第一个参数,以获取指向其余标记的指针。 首先修复这3个错误,然后尝试考虑需要纠正的其他内容才能获得所需的输出。