gpt4 book ai didi

c - 从文本文件读取C中不同类型的变量

转载 作者:行者123 更新时间:2023-11-30 15:34:04 26 4
gpt4 key购买 nike

我有这个:

#define TYPESIZE 180  

char buff[TYPESIZE];
char dat_nazev[TYPESIZE];
int dat_rok;

我用它来从文本文件中读取字符和整数数据。我需要将它们写入屏幕(这可行),然后使用 ADD 方法将其添加到我的结构中:

int pom = 1;

while(fgets(buff, 1000, fr) != NULL)
{
switch (pom)
{
case 1:
printf ("Nazev: %s", buff);
dat_nazev=buff;
pom++;
break;
case 2:
printf ("Rok vydani: %s", buff);
dat_rok=int(buff);
pom++;
break;
case 3:
printf ("Popis: %s", buff);
dat_popis=buff;
add(dat_nazev, dat_rok, dat_popis);
pom =1;
break;
}
}

但这不起作用。如果我尝试将 buff 分配给 dat_nazev (或任何东西),这个 go 将失败。

error C2106: '=' : left operand must be l-value

buff 和 dat_nazev 是相同的日期类型...

并且 dat_rok=int(buff) 不要给 mi 相同的值 - 例如 1986 等给 dat_rok。

感谢您的回答。

最佳答案

要复制字符串,需要使用像strcpy()这样的函数,在C中不能赋值给数组。

例如:

#include <string.h>

...

case 1:
printf ("Nazev: %s", buff);
strcpy(dat_nazev, buff);

请注意,您#define TYPESIZE 180,但随后使用fgets()读取1,000个字符,因此您读取的数据可能多于您的存储空间,这会很糟糕。 strncpy() 是一种替代方法,它允许您对复制的字符数进行限制,但 strncpy() 如果达到限制,则不会以 null 终止字符串,有时(例如,当使用文件名时)仅制作数据的部分副本然后使用它可能与溢出一样糟糕,因此无论哪种方式,您通常都需要非常严格地检查您的输入并仔细管理您的内存。

您也无法像其他一些高级编程语言那样通过强制转换将字符串转换为其他类型。您需要类似 strtol() 的东西:

#include <stdlib.h>

...

case 2:
printf ("Rok vydani: %s", buff);
char * endptr;
dat_rok = (int) strtol(buff, &endptr, 10);
if ( *endptr ) {
fputs("Invalid data, not an integer", stderr);
exit(EXIT_FAILURE);
}

与其他一些高级语言相比,C 语言中的字符串处理工作量更大。

关于c - 从文本文件读取C中不同类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458004/

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