我写了下面的代码,从stdin ex。
逐行阅读city=Boston;city=New York;city=Chicago\n
然后用';'分隔每一行分隔并打印每条记录。
但由于某种原因,“记录”指针返回始终为空。为什么呢?
char del = ';';
char input[BUFLEN];
while(fgets(input, BUFLEN, fp)) {
input[strlen(input)-1]='\0';
char* record = strtok(input, &del);
while(record) {
printf("Record: %s\n",record);
record = strtok(NULL, &del);
}
}
答案 0 :(得分:3)
strtok
在第二个参数的末尾需要一个带有nul(零字节)的字符串。将del
更改为
char * del = ";"
这是一个完整的程序(减去输入阅读部分):
#include <string.h>
#include <stdio.h>
int main ()
{
char* del = ";";
char * input = strdup ("city=Boston;city=New York;city=Chicago\n");
char* record = strtok (input, del);
while (record) {
printf("Record: %s\n",record);
record = strtok (NULL, del);
}
}
试一试:http://codepad.org/tzzxjOJE
还有一个strsep
function,它有一次处理多个字符串的优势。
答案 1 :(得分:2)
尝试char * del =“;”;
第二个参数应该是一个以空字符结尾的字符串,即一个具有空终止字符的字符数组。
然后将del传递给strtok。
char* del = ";";
char input[BUFLEN];
while(fgets(input, BUFLEN, fp)) {
input[strlen(input)-1]='\0';
char* record = strtok(input, del);
while(record) {
printf("Record: %s\n",record);
record = strtok(NULL, del);
}
}
答案 2 :(得分:2)
您对strtok()的调用非常容易发生段错误。 &amp; del指向的char *没有NULL终止符。
答案 3 :(得分:2)
strtok()
期望分隔符字符串恰好是 - 以空值终止的C字符串。你传给它一个字符,显然不是以空字符结尾的字符串,因为分号不是空字符。相反,试试这个:
char del[] = ";";
答案 4 :(得分:1)
我不确定,但我认为因为你的del在最后没有正确的'\ 0'。
你必须确保字符串是NULL终止或大多数字符串函数将在你的变量之后读取内存,这可能导致很多的问题
这样的事情会更好:
char *del = ";";
char input[BUFLEN];
while(fgets(input, BUFLEN, fp)) {
input[strlen(input)-1]='\0';
char* record = strtok(input, del);
while(record) {
printf("Record: %s\n",record);
record = strtok(NULL, del);
}
}