在C中从文件读取字符串输入

阿尔贝托93

我有一个名为“ graphics”的文本文件,其中包含单词“ deoxyribonucleic acid”。

当我运行此代码时,它可以工作并且返回第一个字符。“ d”

int main(){

    FILE *fileptr;                          
    fileptr = fopen("graphics.txt", "r");   
    char name;

    if(fileptr != NULL){ printf("hey \n"); }
    else{ printf("Error"); }

    fscanf( fileptr, "%c", &name);
    printf("%c\n", name);
    fclose( fileptr );

    return 0;
}

当我使用该fscanf函数时,我要发送的参数是FILE对象的名称,该函数将读取的数据类型以及将存储该数据的对象的名称,对吗?另外,为什么我必须&在名字前面加上一个fscanf而不是在前面printf

现在,我想让程序读取文件并获取第一个单词并将其存储在名称中。我知道这必须是一个字符串(一个字符数组)。所以我要做的是:我将名称命名为可以存储20个元素的字符数组。

char name[20];

分别fscanf和中更改参数printf

fscanf( fileptr, "%s", name);
printf("%s\n", name);

这样做不会从编译器产生任何错误,但是程序会崩溃,我也不知道为什么。我让fscanf我想让它读取一个字符串,也让我printf知道它会输出一个字符串。我哪里做错了?我将如何完成上述任务?

弗洛里斯

这是一个非常普遍的问题。fscanf读取数据并将其复制到您提供的位置;所以首先,您需要使用,&因为您提供了变量地址(而不是值)-这样就fscanf知道了将TO复制到何处。

但是,您真的想使用复制“仅与我有空格的字符数”一样的函数。例如fgets(),这包括一个“最大字节数”参数:

char * fgets ( char * str, int num, FILE * stream );

现在,如果您知道只为分配了20个字节str,则可以防止读取超过20个字节并覆盖其他内存。

非常重要的概念!

其他几点。像这样的变量声明

char myString[20];

结果myString是一个指向20个字节的内存,你可以把一个字符串(记得留出空间终止“\ 0”!). So you can use的myStringas the的char *argument in的fscanf orfgets`。但是,当你尝试读取单个字符,而字符被宣布如

char myChar;

您必须“手动”创建指向存储位置的指针,这就是为什么要结束的原因&myChar

注意-如果您想读取空白,fscanf是使用更好的功能;但是如果您不确定自己分配的空间量是否合适,就会出现问题。如评论中所建议,您可以执行以下操作:

char myBuffer[20];
int count = fscanf(fileptr, "%19s ", myBuffer);
if(count != 1) {
  printf("failed to read a string - maybe the name is too long?\n");
}

在这里,您使用的是返回值fscanf(正确转换的参数数量)。您期望精确地转换一个。如果那不起作用,它将打印消息(显然,您将要做的不仅仅是打印消息……)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

目标C:从CSV文件中读取字符串

来自分类Dev

从文件中读取字符串

来自分类Dev

从文件C ++读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

从输入文件SAS读取字符串

来自分类Dev

从输入文件SAS读取字符串

来自分类Dev

从标准输入中读取字符串

来自分类Dev

从标准输入中读取字符串

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

Java从文本(txt)文件中读取字符串

来自分类Dev

从文件中读取字符串和整数

来自分类Dev

从 app.config 文件中读取字符串

来自分类Dev

从原始txt文件中读取字符串

来自分类Dev

如何从整数之前的文件中读取字符串

来自分类Dev

从txt文件中读取字符串,然后在c ++中的第一行停止

来自分类Dev

从C中的名称文件读取字符串时遇到问题

来自分类Dev

从C中的二进制文件读取字符串时发生访问冲突

来自分类Dev

C-从文本文件中读取字符串并按大小排列

来自分类Dev

C从文件中读取字符串内容并比较相等性

来自分类Dev

从C中的文件读取字符串和整数的组合

来自分类Dev

在C编程中从文件读取字符串char和int

来自分类Dev

从共享内存C ++ POSIX中读取字符串

来自分类Dev

在C中读取字符串时scanf的行为

来自分类Dev

在Haskell中读取字符串

来自分类Dev

在Haskell中读取字符串

来自分类Dev

使用TCL从文件读取字符串后从字符串中删除空格

来自分类Dev

从文件中读取字符串下面的字符串