gpt4 book ai didi

C:指针的有效性

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:24 26 4
gpt4 key购买 nike

我编写这段代码是为了从文件中读取值,如果读取的值是“;”就是,到现在为止发生的所有写入字符串的值都应该写入指针数组的字段中

    #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
#define SIZE_STRINGS 100
#define SIZE_ZS 15

int index_drei;
char *laenge_drei[SIZE_STRINGS];

char* string_to_pointer(char []);
void laengen_block_nach_siegen_ordnen();

void spielweg_nach_laenge_des_spieweges_ordnen(bool spieler)
{
int i,
laenge,
index_zs;
char buchstabe,
zs[SIZE_ZS],
zs2[SIZE_ZS],
*zs_p;
bool akt_laenge_auslesen;
FILE * fp;

if(spieler)
fp = fopen("Anlagen\\spielweg_spieler.txt", "r"); //Datei öffnen
else
fp = fopen("Anlagen\\spielweg_ai.txt", "r"); //Datei öffnen

akt_laenge_auslesen = true;
index_drei = 0;

laenge = 0;
index_zs = 0;
for(i = 0; i < SIZE_ZS; i++)
{
zs[i] = 0;
}

if(fp == NULL)
{
}else
{
while((buchstabe = fgetc(fp))!=EOF)
{
zs[index_zs] = buchstabe;
index_zs++;
if(akt_laenge_auslesen == true && buchstabe == '-')
akt_laenge_auslesen = false;
else if(akt_laenge_auslesen)
laenge = buchstabe - '0';
else if(buchstabe == ';')
{
if(laenge == 3)
{
laenge_drei[index_drei] = string_to_pointer(zs);
/*Firts value*/
strcpy(zs2, laenge_drei[0]);
printf("%s", zs2);Sleep(1000);
index_drei++;
}
akt_laenge_auslesen = true;
laenge = 0;
index_zs = 0;
for(i = 0; i < SIZE_ZS; i++)
{
zs[i] = 0;
}
}
}
/*Second value*/
strcpy(zs2, laenge_drei[0]);
printf("%s", zs2);Sleep(1000);
fclose(fp);
}
}

char* string_to_pointer(char string[])
{
return string;
}

如果我在字符串“zs2”中使用 strcpy 写入“length_drei [0]”的值,我得到:

  • /* 第一个值 */正确的值
  • /* 第二个值 */错误值(一个空格)

最佳答案

您没有为要保存在 laenge_drei 中的字符串段分配任何内存。在循环结束时,laenge_drei 的每个索引都包含对 zs 的引用,因此是最后处理的字符串。

if(laenge == 3)
{
laenge_drei[index_drei] = strdup(zs);
printf("%s", laenge_drei[index_drei]);
sleep(1000);
index_drei++;
}

strcpy(zs2, laenge_drei[0]) 更改为 strcpy(zs2, laenge_drei[index_drei]) 如果您尝试打印出每个片段或者您我会一遍又一遍地打印第一个。

当您退出循环并尝试再次打印 laenge_drei[0] 时,它仍将具有第一个值。不要忘记释放您的内存。

关于C:指针的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269829/

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