gpt4 book ai didi

c - 字符串拆分函数中的段错误

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

我不确定我的代码有什么问题:

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

char* splitstr(char* str, int part, char search) {
char* out;
int i;
int result = 0;
for(i=0; str[i]!='\0'; i++) {
if(str[i] == search) {
result = 1;
break;
}
}
if(result == 0) {
if(part == 1) {
return str;
} else {
return "";
}
}
int j;
int k;
if(part == 2) {
for(j = 0; j < i; j++) {
out[j] = str[j];
}
out[j] = '\0';
} else {
for(k = 0,j = i+1; j <= strlen(str)-1; j++, k++) {
out[k] = str[j];
}
out[k] = '\0';
}
return out;
}
}

int main() {
printf("Starting program:\n");
char* str = "Hello World!";
char* a = splitstr(str, 1, ' ');
char* b = splitstr(str, 1, ' ');
printf("A is %s\n", a);
printf("B is %s\n", b);
}

它返回以下输出:

Starting program:
Segmentation Fault: 11

gdb调试后,我发现错误发生在第30行(通过使用断点),在循环的第一次迭代中,当它试图设置out[ 0] (out[k]) 到 str[6] (str[j])。为什么这会触发段错误?我只是将字符串的一个字符更改为另一个字符!

最佳答案

out 中没有字符串。这是一个未初始化的指针,您不能通过它写入,因为没有为您的写入分配内存。这样做会触发未定义的行为,这就是您的程序崩溃的原因。

您必须分配一些,通常使用 malloc()

同样作为一个评论类型的笔记,第一个循环相当于:

const int result = strchr(str, search) != NULL;

关于c - 字符串拆分函数中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196884/

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