strtok和strncat错误

strtok和strncat错误,c,string,strtok,strcat,C,String,Strtok,Strcat,我想通过使用strtok和strncat向每个单词添加字符串“ay”。但似乎有一个冲突的地方,我找不到。它只给了我输出的第一个单词“Computeray”。帮忙 #include <stdio.h> #include <string.h> int main(void) { char str[] = "Computer science is hard"; char* Token; char* work = "ay"; Token = str

我想通过使用strtok和strncat向每个单词添加字符串“ay”。但似乎有一个冲突的地方,我找不到。它只给了我输出的第一个单词“Computeray”。帮忙

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

int main(void)
{
    char str[] = "Computer science is hard";
    char* Token;
    char* work = "ay";
    Token = strtok(str, " ");

    while (Token != NULL)
    {
        strncat(Token, work, 2);
        printf("%s", Token);
        Token = strtok(NULL, " ");
    }
    return 0;
}
#包括
#包括
内部主(空)
{
char str[]=“计算机科学很难”;
字符*令牌;
char*work=“ay”;
标记=strtok(str,“”);
while(令牌!=NULL)
{
strncat(代币,工作,2);
printf(“%s”,标记);
令牌=strtok(空,“”);
}
返回0;
}

您正在修改字符串(使用
strcat
)并期望
strtok
仍能正常工作-这是行不通的。不要使用strcat,只需单独打印
“ay”

while (Token != NULL)
{
    printf("%say ", Token);
    Token = strtok(NULL, " ");
}

即使它按照您希望的方式工作,您也会在过程中覆盖大量输入。可能不是你想要的-如果你需要建立一个全新的字符串,你应该把它放到一个新的缓冲区中,而不是覆盖输入。

谢谢你的回复。但是,我如何在不使用strncat/strcat的情况下在每个单词的末尾打印“ay”呢?@ProgrammingNerd Carl提供了一个很好的例子,
printf(“%say”,Token)
@cnicutar Oh nvm没有首先捕捉到这一点。多亏了你