gpt4 book ai didi

c - C中动态数组和指针的问题

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

我想从 STDIN 读取以下行并将值保存在 c:

A:2
B:3
C:AAAA1
C:AASC2
C:aade3
D:1
D:199

这是我的 C 程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include <sys/time.h>

int main(int argc, char **argv)
{

char buf[BUFSIZ];
short a = 0;
short b = 0;
short anzb=0;
short anza=0;
char *c
short *d;

short i;


while (fgets(buf, BUFSIZ, stdin) != NULL)
{
if (buf[strlen(buf)-1] == '\n') {
char *isa = strstr(buf, "A:");
char *isb = strstr(buf, "B:");
char *isc = strstr(buf, "C:");
char *isd = strstr(buf, "D:");
if(isa){
char *sep = substring(isa,3,strlen(isa));
a = atoi(sep);
d = malloc(a * sizeof(short));
}else if(isb){
char *sep = substring(isb,3,strlen(isb));
b = atoi(sep);
c = malloc(b * sizeof(char));
}else if(isc){
char *sep = substring(isc,3,strlen(isc));
c[anzc] = sep;
anzc++;
}else if(isd){
char *sep = substring(isd,3,strlen(isd));
d[anzd] = sep;
anzd++;
}
}
}

printf("%i\n", a);
printf("%i\n", b);

for(i=0; i<=anzc-1;i++){
printf("%c", c[i]);
}

return 0;
}

我是 c 的新手,所以我对指针和数组的了解不多,所以我希望你能帮助我。

在值 A: 和 B: 被读取并存储在 a 和 b 之后,我可以为 c 和 d 的行创建我的数组。我认为这是我的问题。我不知道此时如何在我的程序中创建数组。我尝试使用 malloc 和其他东西,但我的知识很少。

如果我已经读取了 c 和 d(A 和 B)的值(大小),我只想创建一个数组。

然后我想将值保存在数组中。

我希望你能帮助我修复我的代码。今天我尝试了很多,但没有任何效果,我现在很无助。

编辑:

出现段错误 11 的新尝试:

     else if(isb){
char *sep = substring(isb,8,strlen(isb));
b = atoi(sep);
c = malloc(b * sizeof(char*));
int i;
for (i = 0; i < subst; i++)
{
c[i] = malloc(13);
}
}else if(isc){
char *sep = substring(isc,8,strlen(isc));
strcpy(c[anzc], &buf[3]);
anzc++;
}

最佳答案

您的分配或多或少是正确的,但是您忽略了一些细节。 B 为您提供值 3,即 C 的条目数,而不是每个条目的长度。然后,当您实际上需要一个类型为 char* 的二维数组时,您分配了一个数组,该数组将指向 3 个其他数组,这些数组将包含 C 行上的每个值。所以;

这一行 c = malloc(b * sizeof(char)); 需要是 c = malloc(b * sizeof(char*));然后你需要做的;

 int i;
for (i = 0; i < b; i++)
{
c[i] = malloc(length); // where length is some arbitrary buffer length
// because you have no way of knowing the length of the individual strings.
}

在此之后,您可以使用 strcpy 将这些行复制到您在 for 循环中分配的每个 char 数组中。

所以要完成复制你需要做这样的事情;

         int iC = 0;
// outside of the while loop we need a control var track the index
// of the c array. it needs to work independent of the normal iteration.
//inside the while loop
else if(isc){
strcpy(c[iC], &buf[3])
iC++;
}

关于c - C中动态数组和指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173723/

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