gpt4 book ai didi

C、结构只写4个字符

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

我在编写代码时遇到了一个我无法处理的问题。我必须将数据从 txt 文件写入结构。代码如下所示:

typedef struct uzytkownik_
{
char *imie;
char *nazwisko;
char *oprogramowanie;
char *ip;
struct uzytkownik *next;
}uzytkownik;

稍后在代码中我有这个:

    fgets(tekst,sizeof(tekst),plik);
sscanf(tekst,"%s",&gl->wsk_u->imie);
fgets(tekst,sizeof(tekst),plik);
sscanf(tekst,"%s",&gl->wsk_u->nazwisko);
fgets(tekst,sizeof(tekst),plik);
sscanf(tekst,"%s",&gl->wsk_u->oprogramowanie);
fgets(tekst,sizeof(tekst),plik);
sscanf(tekst,"%s",&gl->wsk_u->ip);
printf("%s\n",&gl->wsk_u->nazwisko);
printf("%s\n",&gl->wsk_u->imie);
printf("%s\n",&gl->wsk_u->oprogramowanie);
printf("%s\n",&gl->wsk_u->ip);

我知道我可以使用 fscanf 所以它会更短,它是这样写的但我认为这是我的问题的根源所以我用 fgets 和 sscanf 替换它。效果一样。 printf 在那里查看结果是什么。 gl 是指向我的列表的“头”指针,wsk_u 是指向我的 uzytkownik 结构的另一个指针。现在有什么问题?所以对于给定的数据:

Adam
Kowalski
Windows7
174.14.0.1

结果是:

KowaWind174.14.0.1
AdamKowaWind174.14.0.1
Wind174.14.0.1
174.14.0.1

它的基本功能是,它从文本行中取出 4 个字符并剪切其余部分,然后从文本文件中添加下一行(如您所见,在最后一个单词旁边也剪切为 4 个字符)。它应该看起来像这样:

Kowalski
Adam
Windows7
174.14.0.1

为什么它会这样工作,问题的根源在哪里?编辑:内存分配代码:

    gl->wsk_u=malloc(sizeof(uzytkownik));
gl->wsk_u->next=NULL;

这两行就在sscanf代码之上。

最佳答案

我可以在这里看到一些问题:

  1. 没有为字符串分配内存
  2. 错误使用sscanf
  3. 错误使用printf

在使用之前必须为字符串分配内存

gl->wsk_u->imie = malloc(size_of_your_expected_string);
//DO this for each member you use with sscanf functon

错误使用 sscanf 是根本问题。

sscanf(tekst,"%s", &gl->wsk_u->imie);

应该是

gl->wsk_u->imie = malloc(100); //FOr example 100 bytes.
//DO this malloc for all entries
sscanf(tekst,"%s", gl->wsk_u->imie);

打印错误

printf("%s\n",&gl->wsk_u->imie); 

应该是

printf("%s\n", gl->wsk_u->imie);

关于C、结构只写4个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588772/

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