Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从文本文件中读取字符串的Strtok_C - Fatal编程技术网

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非常感谢您提到,我检查了文本文件,发现它混合了空格。再次感谢!