gpt4 book ai didi

c编程结构指针的动态分配

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

程序将输入“1z”读取为 (str+0)->input_name,将“2y”读取为 (str+1)->input_name,将“3x”读取为 (str+2)->input_name。现在我想做的是在不删除初始元素的情况下向 (str+0)->input_name 插入一个新字符串。所以初始的 (str+0)->input_name 将变为 (str+1)->input_name,(str+1)->input_name 变为 (str+2)->input_name,而 (str+2)->input_name 变为 ( str+3)->输入名称。我该怎么做??

初始化项目

产品数量:3

输入姓名:1z

输入姓名:2y

输入姓名:3x

输出

1 -> 1z

2 -> 2 年

3 -> 3x

=====================

输入:4a

输出

1 -> 4a

2 -> 2 年

3 -> 3x

4 -> 你好

我想做的是:

输出

1 -> 4a

2 -> 1z

3 -> 2 岁

4 -> 3x

我该怎么办?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1000

struct input{
char input_name[SIZE];
};

int main(){
int i, startNum;
struct input *str;
char _startNum[SIZE];
char _mode[SIZE];

fputs("****Choose Menu****\n", stderr);
fputs("\n**Initialize items**\nNumber of products: ", stderr);
fgets(_startNum, SIZE, stdin);
startNum = atoi(_startNum);

str = (struct input*)malloc(startNum * sizeof(struct input));
if (str == NULL){
printf("Memory allocation error\n");
exit(EXIT_FAILURE);
}

for(i = 0; i < startNum; i++){
printf("Enter name: ");
fgets((str+i)->input_name, sizeof(struct input), stdin);
}
printf("\n");


fputs("\n**Output**\n", stderr);
for(i = 0; i < startNum; i++){
printf("%d -> %s", i+1, (str+i)->input_name);
}
printf("\n");

startNum++;

strcpy((str+startNum-1)->input_name, "Hello");
for(i = startNum - 1; i = 0; i--){
strcpy((str+i)->input_name,(str+i-1)->input_name);
}

fputs("Input: ", stderr);
fgets((str+0)->input_name, SIZE, stdin);

fputs("\n**Output**\n", stderr);
for(i = 0; i < startNum; i++){
printf("%d -> %s", i+1, (str+i)->input_name);
}
fputs("\n", stderr);

return EXIT_SUCCESS;
}

最佳答案

如果我没理解错,那么你需要以下内容

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1000

struct input{
char input_name[SIZE];
};

int main( void )
{
int i, startNum;
struct input *str;
char _startNum[SIZE];
char _mode[SIZE];

fputs("****Choose Menu****\n", stderr);
fputs("\n**Initialize items**\nNumber of products: ", stderr);
fgets(_startNum, SIZE, stdin);
startNum = atoi(_startNum);

str = (struct input*)malloc(startNum * sizeof(struct input));
if (str == NULL){
printf("Memory allocation error\n");
exit(EXIT_FAILURE);
}

for(i = 0; i < startNum; i++){
printf("Enter name: ");
fgets((str+i)->input_name, SIZE, stdin);
}
printf("\n");


fputs("\n**Output**\n", stderr);
for(i = 0; i < startNum; i++){
printf("%d -> %s", i+1, (str+i)->input_name);
}
printf("\n");

startNum++;


struct input tmp = realloc(str, startNum * sizeof(struct input));
if (tmp == NULL){
printf("Memory reallocation error\n");
exit(EXIT_FAILURE);
}

str = tmp;

strcpy((str+startNum-1)->input_name, "Hello");
for(i = startNum - 1; i != 0; i--){
strcpy((str+i)->input_name,(str+i-1)->input_name);
}

fputs("Input: ", stderr);
fgets((str+0)->input_name, SIZE, stdin);

fputs("\n**Output**\n", stderr);
for(i = 0; i < startNum; i++){
printf("%d -> %s", i+1, (str+i)->input_name);
}
fputs("\n", stderr);

free( str );

return EXIT_SUCCESS;
}

至于您的代码,它具有未定义的行为,因为没有为附加元素分配内存。

这个循环中有一个错字

for(i = startNum - 1; i = 0; i--){
^^^^^

使用赋值代替比较。

也代替这个调用

fgets((str+i)->input_name, sizeof(struct input), stdin);

通常你必须使用

fgets((str+i)->input_name, sizeof((str+i)->input_name), stdin);

fgets((str+i)->input_name, SIZE, stdin);

关于c编程结构指针的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756245/

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