gpt4 book ai didi

c - 不同字符串指针/数组类型的 strsep 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:55 25 4
gpt4 key购买 nike

平台:Linux、OSX
编译器:GCC

我有一个简单的程序,目前让我感到困惑 - 我知道我正在弄乱几种不同类型的数组/指针来产生这个问题 - 它是故意的 - 我试图理解它。

列出的代码将按预期编译和运行,但将 strsep(&data4, "e"); 调用中的 data4 更改为 data1data3 导致段错误。我想了解原因。

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

int main(int c, char** v) {
char* data1 = "hello\0";
char* data2 = strdup(data1);
size_t sz = strlen(data1);
char data3[sz+1];
char* data4;

memset(data3, 0, sz+1);
data4 = strncpy(data3, data1, sz);
data4[sz] = '\0';

char* found = strsep(&data4, "e");

if (found == NULL) {
printf("nothing found\n");
} else {
printf("found e\n");
}

return 0;
}

最佳答案

changing data4 in the call to strsep(&data4, "e"); to data1 or data3 causes a segmentation fault.

在这种情况下:

char* found = strsep(&data1, "e");

data1 指向的字符串是文字,因此无法更改。当 strsep() 尝试将 '\0' 放入其中时,出现段错误。

另一种情况:

char* found = strsep(&data3, "e");

data3 是一个数组,而不是指针(尽管数组很容易计算为指针,但它们实际上并不是指针),因此 strsep() 无法更新一旦找到 token ,它就会尝试执行的指针。我从试图指出这一点的 gcc 收到以下警告:

test.c:17: warning: passing argument 1 of 'strsep' from incompatible pointer type

关于c - 不同字符串指针/数组类型的 strsep 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972332/

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