gpt4 book ai didi

C 吐出字符串时出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:38:48 24 4
gpt4 key购买 nike

首先,抱歉,如果这是一个基本(或愚蠢)的问题,我来自 Python,而且我对 C 很陌生(仍在研究它)。

我有一个简短的脚本来将字符串拆分为子字符串,例如:“这是我的字符串”转换为“这个”,"is",“我的”,“-字符串”。

之后我想选择以字符:'-'开头的子字符串,并保存在变量中调用“subline”:

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

#define MAX_CHAR 9999

int main ()
{

char line[] ="this is my -string";
char *p;
char subline[MAX_CHAR];


printf ("Split string in tokens:\n");

p = strtok (line," ");

while (p != NULL)
{
printf ("%s\n", p);
p = strtok (NULL, " ,");

if ((strncmp(p, "-", 1) == 0)){
memcpy(subline, ++p, strlen(p)+1);
printf ("subline: %s\n", subline);

}


}
printf ("\nData:\n");
printf ("subline is: %s\n", subline);
return 0;
}

在 while 循环内一切运行良好,我什至可以打印变量“subline”,但在 while 循环外我遇到段错误,这是输出:

root@debian:/home/user/Desktop/splits# ./split
Split string in tokens:
this
is
my
subline: string
string
Segmentation fault

我试图找出并使用 malloc(sizeof(*subline)); 解决它但在 while 循环之外总是出现相同的段错误。

有人有什么想法吗?

谢谢。

最佳答案

p变为null时,您仍然将其传递给strcncmp()。不要这样做——而是添加另一个检查。

当代码在 while 循环中检测到不再有匹配项时,strtok 返回 NULL,但在循环逻辑捕获它之前,strncmp() code> 方法是用 NULL 指针调用的。

关于C 吐出字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32468396/

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