#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。
如果有人能告诉我为什么会发生这种情况以及我做错了什么,我将不胜感激。
答案 0 :(得分:0)
因为您无法修改字符串文字,所以它不合法。试试这个
sed
此外,尝试在不修改输入字符串的情况下学习\n
之外的其他内容,因为\n
会这样做,这就是您收到错误的原因。
作为推荐,请始终使用s/\n$//'
作为字符串文字
char line[] = "donuts,are,cool,and,tasty";
编译器会帮助您发现您正在尝试做一些不好的事情。
此外,你strtok()
比你需要的少1个字符。字符串需要长度字符+ 1,最后一个字符是strtok()
终结符,如果要将数据用作字符串,则始终需要它,所有 str 函数期望此值存在,因此您需要为其分配空间,并将其复制
const
答案 1 :(得分:0)