C 不同字符串指针/数组类型上的strep分段错误
平台:Linux、OSX 编译器:GCC 我有一个简单的程序,它现在让我很困惑-我知道我正在处理一些不同类型的数组/指针来产生这个问题-这是故意的-我正在努力理解它 所列代码将按预期编译和运行,但在调用strep&data4,e中更改data4;到data1或data3会导致分段错误。我想知道为什么C 不同字符串指针/数组类型上的strep分段错误,c,string,memory-management,libc,C,String,Memory Management,Libc,平台:Linux、OSX 编译器:GCC 我有一个简单的程序,它现在让我很困惑-我知道我正在处理一些不同类型的数组/指针来产生这个问题-这是故意的-我正在努力理解它 所列代码将按预期编译和运行,但在调用strep&data4,e中更改data4;到data1或data3会导致分段错误。我想知道为什么 #include <stdio.h> #include <string.h> int main(int c, char** v) { char* data1 = "
#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;
}
将调用中的数据4更改为strep&data4,e;到data1或data3会导致分段错误
在这种情况下:
char* found = strsep(&data1, "e");
data1指向的字符串是文本,因此无法更改。当strep试图将“\0”放入其中时,segfault
在另一种情况下:
char* found = strsep(&data3, "e");
data3是一个数组,不是指针,即使数组很容易计算为指针,但它们实际上不是指针,因此strep无法更新指针的值,这是它在找到标记后尝试执行的操作。我从gcc得到以下警告,试图指出这一点:
test.c:17: warning: passing argument 1 of 'strsep' from incompatible pointer type
将调用中的数据4更改为strep&data4,e;到data1或data3会导致分段错误
在这种情况下:
char* found = strsep(&data1, "e");
data1指向的字符串是文本,因此无法更改。当strep试图将“\0”放入其中时,segfault
在另一种情况下:
char* found = strsep(&data3, "e");
data3是一个数组,不是指针,即使数组很容易计算为指针,但它们实际上不是指针,因此strep无法更新指针的值,这是它在找到标记后尝试执行的操作。我从gcc得到以下警告,试图指出这一点:
test.c:17: warning: passing argument 1 of 'strsep' from incompatible pointer type