gpt4 book ai didi

c - 在 C 中,即使从不同来源编译示例代码,strtok 也会导致我的程序崩溃

转载 作者:太空狗 更新时间:2023-10-29 15:37:50 24 4
gpt4 key购买 nike

使用下面演示的代码,程序崩溃了。这是我从 this source 复制粘贴的代码并且根本没有修改它,但是 strtok 似乎导致程序崩溃。

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

int main()
{
char str[80] = "This is - www.tutorialspoint.com - website";
const char s[2] = "-";
char *token;

/* get the first token */
token = strtok(str, s);

/* walk through other tokens */
while( token != NULL )
{
printf( " %s\n", token );

token = strtok(NULL, s);
}

return(0);
}

我似乎找不到原因。我尝试寻找 strtok 函数的来源,并遇到了 this :

char * __cdecl strtok(char *s1, const char *delimit)
{
static char *lastToken = NULL; /* UNSAFE SHARED STATE! */
char *tmp;

/* Skip leading delimiters if new string. */
if ( s1 == NULL ) {
s1 = lastToken;
if (s1 == NULL) /* End of story? */
return NULL;
} else {
s1 += strspn(s1, delimit);
}

/* Find end of segment */
tmp = strpbrk(s1, delimit);
if (tmp) {
/* Found another delimiter, split string and save state. */
*tmp = '\0'; //->This seems to be the line at fault<-
lastToken = tmp + 1;
} else {
/* Last segment, remember that. */
lastToken = NULL;
}

return s1;
}

制作本地副本并在我的代码中使用它导致了同样的问题,并且在使用了一些打印之后似乎在第一次调用该函数之后,它崩溃了,具体来说,strpbrk 返回了正确的值,这可以可以访问(通过对其返回值使用 printf),但是当分配值\0 时,它会导致程序崩溃(显然无法打印在它之后输入的任何消息)。

就我所知,有人知道发生了什么吗?

预先感谢您的回复。

最佳答案

请看code is working .问题可能是您的本地环境和配置中的本地错误。您可以尝试使用另一台计算机或点击链接,看看您是否获得了预期的输出。

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

int main()
{
char str[80] = "This is - www.tutorialspoint.com - website";
const char s[2] = "-";
char *token;

/* get the first token */
token = strtok(str, s);

/* walk through other tokens */
while( token != NULL )
{
printf( " %s\n", token );

token = strtok(NULL, s);
}

return(0);
}

如果您使用分析程序运行编译程序,例如 Valgrind您会注意到代码中没有报告任何错误,或者您可以调试崩溃并在程序崩溃的代码中得到一条很好的错误消息。

关于c - 在 C 中,即使从不同来源编译示例代码,strtok 也会导致我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100888/

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