gpt4 book ai didi

c - 使用 fscanf 从文件读取时内存中的随机字符

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:40 25 4
gpt4 key购买 nike

        //create the array from file
char *array[100];
char string[80];
FILE * file;
file = fopen( "file.txt" , "r");
if (file) {
int k = 0;
while (fscanf(file, "%s", string)!=EOF){
array[k] = strdup(string);
k++;
}
fclose(file);
}

//print the history array for debugging
for(int k = 0; k<sizeof(array); k++){
printf("the element at %d is: %s\n", k, array[k]);
}

生成的数组包含内存中的随机字符,这些字符不存在于文件中。有什么办法可以避免这种情况吗?

最佳答案

代码中有两个问题。

首先是您使用fscanf 来读取文件,而不是fgets。格式为"%s"fscanf 将从文件中读取一个单词。 fgets 读取一行。

第二个问题是最后一个 for 循环,它使用了 sizeof(array)。在 32 位机器上,sizeof(array) 是 100*4 = 400。您想要的是计算从文​​件中读取的行数,然后在for 循环。

考虑到这一点,下面是我将如何编写代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void )
{
char *array[100];
char string[80];
FILE *fp;

if ( (fp = fopen( "file.txt" , "r")) == NULL )
{
printf( "File not found\n" );
exit( 1 );
}

int count = 0;
while ( fgets( string, sizeof(string), fp ) != NULL )
{
string[strcspn(string,"\n")] = '\0';
if ( count < 100 )
{
array[count] = strdup( string );
count++;
}
}

fclose( fp );

for ( int k = 0; k < count; k++ )
printf( "the element at %d is: %s\n", k, array[k] );
}

线

string[strcspn(string,"\n")] = '\0';

从字符串中删除换行符(如果有)。这是必要的,因为 fgets 将保留换行符。

关于c - 使用 fscanf 从文件读取时内存中的随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com