C 从文本文件中读取字符串的Strtok
我一直在尝试使用C 从文本文件中读取字符串的Strtok,c,C,我一直在尝试使用strtok标记表中的字符串,但它不起作用 文本文件中的表具有此格式(仅为示例),由制表符分隔 Jane Doe iPhone 6 nj-34-k4-3j-jk 我想得到第三个元素,但它不起作用。 这就是函数的外观 scanf("%s", filename); fp2 = fopen(filename,"r"); if (fp2 == NULL){ prin
strtok
标记表中的字符串,但它不起作用
文本文件中的表具有此格式(仅为示例),由制表符分隔
Jane Doe iPhone 6 nj-34-k4-3j-jk
我想得到第三个元素,但它不起作用。
这就是函数的外观
scanf("%s", filename);
fp2 = fopen(filename,"r");
if (fp2 == NULL){
printf("Error reading File \n");
exit(1);
}
//while reading a line, keep getting tokens (a line)
while ( fgets ( str, sizeof(str), fp2 ) != NULL )
{
token = strtok(str," ");
token = strtok(NULL," ");
token = strtok(NULL," ");
if(index>0){
strupr(token);
strcpy(address[index-1], token); //store in array
}
index++;
}
使用制表符将其按制表符拆分
token = strtok(str,"\t");
token = strtok(NULL,"\t");
token = strtok(NULL,"\t");
使用制表符将其按制表符拆分
token = strtok(str,"\t");
token = strtok(NULL,"\t");
token = strtok(NULL,"\t");
你的意思是真正的制表符(
'\t'
)还是一些空格('
)通过“制表符”对齐?@MikeCAT是真正的制表符('\t')strtok()
的第二个参数应该有一个\t
(制表符)作为字符之一。它可能也可能不包含换行符\n
。@JonathanLeffler尝试了它,但程序停止了工作。您还没有显示地址或索引是如何定义和初始化的。您没有检查来自strtok()
的返回;您没有显示在strtok()
损坏它之前读取的行,也没有显示strtok()
返回的内容。代码不是MCVE()。很难猜出哪里出了问题。您是指真正的制表符('\t'
)还是一些空格('
)通过“制表符”对齐?@MikeCAT yes real tabs('\t')strtok()
的第二个参数应该有一个\t
(制表符)作为字符之一。它可能也可能不包含换行符\n
。@JonathanLeffler尝试了它,但程序停止了工作。您还没有显示地址或索引是如何定义和初始化的。您没有检查来自strtok()
的返回;您没有显示在strtok()
损坏它之前读取的行,也没有显示strtok()
返回的内容。代码不是MCVE()。很难猜出哪里出了问题。只有第一行起作用,才能得到第一个元素。如果我添加'token=strtok(NULL,“\t”);令牌=strtok(空,“\t”);'该程序将停止工作。@chelsey。请告诉我们。如果有空格与制表符混合,则const char*delim=“\t”;strtok(str,delim);strtok(NULL,delim)
@MikeCAT非常感谢您的努力,刚刚修复了它,strtok(NULL,“\t”)也工作了@Pablo非常感谢您提到,我检查了文本文件,发现它混合了空格。再次感谢!只有第一行起作用,得到第一个元素。如果我添加'token=strtok(NULL,“\t”);令牌=strtok(空,“\t”);'该程序将停止工作。@chelsey。请告诉我们。如果有空格与制表符混合,则const char*delim=“\t”;strtok(str,delim);strtok(NULL,delim)
@MikeCAT非常感谢您的努力,刚刚修复了它,strtok(NULL,“\t”)也工作了@Pablo非常感谢您提到,我检查了文本文件,发现它混合了空格。再次感谢!