gpt4 book ai didi

c - 奇怪的 C 错误 : Adding a print statement before a line makes it run, 但没有它它会出错

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:49 26 4
gpt4 key购买 nike

我正在编写一个基本的分词器来练习我的 C,但遇到了一个奇怪的错误。我做错了什么?

这会崩溃:

char* makeToken(char* string, char deliminator)
{
char* token;
char* counter=token;
char currentChar;
string-=1;
while((currentChar=*(string+=1))!=deliminator)
{
*counter=currentChar;
counter++;
}

*counter='\0';

return token;
}

但这运行正常:

char* makeToken(char* string, char deliminator)
{
char* token;
char* counter=token;
char currentChar;
string-=1;
while((currentChar=*(string+=1))!=deliminator)
{
printf("Making token\n");
*counter=currentChar;
counter++;
}

*counter='\0';

return token;
}

最佳答案

两个版本在我的机器上都出错。可能是因为 C 中没有垃圾收集,第二个版本似乎可以在您的机器上运行。

代码有几个问题,但这是一个可以工作的版本

char* makeToken(char* string, char delimiter)
{
//You need to initialize token
char* token=malloc(strlen(string)); // The token can be as long as the string
char* counter=token;
char currentChar=*string;
if(token==NULL){
return NULL;
}

//if delimiter does not exist the loop must end
while(currentChar!=delimiter&&currentChar!='\0')
{
*counter=currentChar;
counter++;
string++;
currentChar=*string;
}
*counter='\0';
return token;
}

关于c - 奇怪的 C 错误 : Adding a print statement before a line makes it run, 但没有它它会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com