我在C中使用了getline()函数,当我多次使用它时,它一直给出我的seg错误,就像数组一样。这是我写的方式:
temp = (char *)malloc(sizeof(char)*clen);
read = getline(&temp, &clen, stdin);
tn = strtok(temp, ",");
strcpy(travel[tripnum].name, tn);
tn = strtok(NULL, ",");
travel[tripnum].country = tn;
free((void *) temp);
如果我宣布错误的话,请告诉我
答案 0 :(得分:2)
如this getline tutorial所示,你需要分配(clen + 1)。一个额外的终端NULL。
答案 1 :(得分:0)
你有没有试过这样做? temp =(char *)malloc(sizeof(char)* clen + 1);
由于空终止字符串
答案 2 :(得分:0)
尝试将此与其他人所说的一起使用。 我觉得getline函数clen应该在没有&符号的情况下使用。 像read = getline(& temp,clen,stdin);
答案 3 :(得分:0)
您的tn
变量(strtok()
的结果)指向temp
缓冲区内。
temp
缓冲区在代码段的最后一行被销毁,但tn
指针中的一个(temp
内部)已保存在travel[tripnum].country
中
这个travel[tripnum].country
是一个悬空指针,通过它的所有访问都是无效的。