有人可以帮我解决这个问题吗?我有一个.txt
文件,我正在通过fopen
使用C进行阅读。我可以将文本作为变量显示在屏幕上,这很好。但是我从文件中读取的文本是逗号分隔的。如何将文本文件中的字符串拆分为两个变量而不是一个?
用户名,密码
我希望最终输出为
var1 =用户名 var2 =密码
这是我的代码。
inFile = fopen("logfile.txt", "r"); /*This opens the file */
if (inFile == NULL) /*Checks that the file exists*/ {
printf("\nThe file %c was not opened successfully.", fileName);
printf("\nPlease check that you entered the file name correctly.\n");
exit(1);
}
while (fscanf(inFile, "%s", text) !=EOF) /*Reads and displays the file*/
printf("%s\n", text);
fclose(inFile);
有点修复
#include <stdio.h>
#include <string.h>
#include <iostream>
int main (void) {
char *s;
char test[50];
int i=0;
char str[] =
"username,password";
printf ("%s\n", str);
s = strtok (str, ",");
//
while (s != NULL) {
printf ("%s\n", s);
s = strtok (NULL, ",");
}
system("pause");
return 0;
}
答案 0 :(得分:3)
您正在寻找strtok
功能
答案 1 :(得分:0)
该过程是使用strtok
函数。该函数的作用是将分隔符(在本例中为,
)更改为\0
(null)字符。然后它传回一个指向现在由\0
终止的字符串开头的指针。如果再次使用NULL传入它,它将再次基于分隔符(如果存在)进行拆分,并将指针传递回字符串的第二部分。以下是您需要添加的代码:
#include <string.h>
char* var1;
char* var2;
然后在你的while循环中:
{
var1 = strtok(text,",");
var2 = strtok(NULL,",");
printf("%s<NOT A ','>%s\n", var1,var2);
}
这对字符串文本的作用如下。当我们从文件中获取它时,text
=
/------------------------------------\
|u|s|e|r|n|a|m|e|,|p|a|s|s|w|o|r|d|\0|
\------------------------------------/
while循环的第一行更改它,以便text
=
/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------------------------/
var1
指向1上方的字母,var1 = username
。请注意,这意味着如果您在text
上运行printf,您还将获得用户名。在第二行之后,text
=
/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------2-----------------/
现在var1
指向字符串“username”,var2
指向字符串“password”。如果你打印text
,你仍然会得到“用户名”。
请注意,如果您想要获得两个以上的变量,那么您需要安全捕获,确保在尝试使用字符串之前strtok没有返回NULL
。
另请注意,如果您修改text
,您还会弄乱var1
和var2
。如果您希望以更持久的方式保存信息,我建议您使用strcpy
到另一个字符串。
答案 2 :(得分:0)
如果您可以确保归档分隔符是','并且输入数据只有两个字段。
因为strtok
不是可重入的函数所以当输入数据格式已经知道时,我通常使用scanf
strtok
的{{1}}。{/ p>
int re;
char line[200];
char usernme[100];
char password[100];
while (fgets(line, 200, inFile) != NULL)
{
/*Reads and displays the file*/
re = sscane(line, "%[^","],%s", username, password);
if(re == 2)
{
printf("Usarname = %s, Password = = %d\r\n", username, password);
}
}