总线错误:C程序中有10个,无法找出原因

时间:2017-03-20 22:08:16

标签: c malloc strtok bus-error

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

void split_line(char **fields, char *line);

int main() {
    char *fields[5];
    char *line = "donuts,are,cool,and,tasty";
    int i = 0;

    split_line(fields, line);

    return 0;
}

void split_line(char **fields, char *line) {
    int i = 0;
    char *token, *delim;
    delim = ",\n";
    token = strtok(line, delim);
    while (token) {
        fields[i] = malloc(strlen(token));
        strcpy(fields[i], token);
        token = strtok(NULL, delim);
        i++;
    }

}

我是C的新手,并且一直试图弄清楚如何在一小时的大部分时间内解决这个错误。它编译但在运行时我得到了

  

总线错误:10。

如果有人能告诉我为什么会发生这种情况以及我做错了什么,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

因为您无法修改字符串文字,所以它不合法。试试这个

sed

此外,尝试在不修改输入字符串的情况下学习\n之外的其他内容,因为\n会这样做,这就是您收到错误的原因。

作为推荐,请始终使用s/\n$//'作为字符串文字

char line[] = "donuts,are,cool,and,tasty";

编译器会帮助您发现您正在尝试做一些不好的事情。

此外,你strtok()比你需要的少1个字符。字符串需要长度字符+ 1,最后一个字符是strtok()终结符,如果要将数据用作字符串,则始终需要它,所有 str 函数期望此值存在,因此您需要为其分配空间,并将其复制

const

答案 1 :(得分:0)

您的错误分配可能就是这种情况。如果您有权访问strdup,请尝试使用:

sed -i '/mysqli_query/s/select/SELECT/...

您最终负责释放已分配的内存。