c编程结构指针的动态分配
程序将输入“1z”读取为(str+0)->输入名称,“2y”读取为(str+1)->输入名称,“3x”读取为(str+2)->输入名称。现在我要做的是在(str+0)->input\u name中插入一个新字符串,而不删除初始元素。所以初始值(str+0)->input\u name将变成(str+1)->input\u name,(str+1)->input\u name变成(str+2)->input\u name,(str+2)->input\u name变成(str+3)->input\u name。我该怎么做 初始化项目 产品数量:3 输入名称:1z 输入名称:2y 输入名称:3x 输出 1->1z 2->2y 3->3x ===================== 输入:4a 输出 1->4a 2->2y 3->3x 4->你好 我想做的是: 输出 1->4a 2->1z 3->2y 4->3x 我该怎么办c编程结构指针的动态分配,c,memory-management,dynamic-memory-allocation,realloc,C,Memory Management,Dynamic Memory Allocation,Realloc,程序将输入“1z”读取为(str+0)->输入名称,“2y”读取为(str+1)->输入名称,“3x”读取为(str+2)->输入名称。现在我要做的是在(str+0)->input\u name中插入一个新字符串,而不删除初始元素。所以初始值(str+0)->input\u name将变成(str+1)->input\u name,(str+1)->input\u name变成(str+2)->input\u name,(str+2)->input\u name变成(str+3)->input\
#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;
}
#包括
#包括
#包括
#定义大小1000
结构输入{
字符输入_名称[大小];
};
int main(){
int i,startNum;
结构输入*str;
char_startNum[尺寸];
字符模式[大小];
FPUT(“****选择菜单******\n”,标准);
FPUT(“\n**初始化项目**\n产品编号:”,标准);
fgets(标准、尺寸、标准);
startNum=atoi(_startNum);
str=(结构输入*)malloc(startNum*sizeof(结构输入));
如果(str==NULL){
printf(“内存分配错误\n”);
退出(退出失败);
}
对于(i=0;iinput_name,sizeof(struct input),stdin);
}
printf(“\n”);
fputs(“\n**输出**\n”,标准);
对于(i=0;i%s”,i+1,(str+i)->输入\u名称);
}
printf(“\n”);
startNum++;
strcpy((str+startNum-1)->输入名称“Hello”);
对于(i=startNum-1;i=0;i--){
strcpy((str+i)->输入名称,(str+i-1)->输入名称);
}
FPUT(“输入:”,标准偏差);
fgets((str+0)->输入名称、大小、标准输入);
fputs(“\n**输出**\n”,标准);
对于(i=0;i%s”,i+1,(str+i)->输入\u名称);
}
FPUT(“\n”,标准);
返回退出成功;
}
如果我理解正确,那么您需要以下内容
#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;
}
其中使用赋值代替比较
也不是这个电话
fgets((str+i)->input_name, sizeof(struct input), stdin);
一般来说,您必须使用
fgets((str+i)->input_name, sizeof((str+i)->input_name), stdin);
或
如果我理解正确,那么您需要以下内容
#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;
}
其中使用赋值代替比较
也不是这个电话
fgets((str+i)->input_name, sizeof(struct input), stdin);
一般来说,您必须使用
fgets((str+i)->input_name, sizeof((str+i)->input_name), stdin);
或
您可能想阅读以下内容:使用
perror
-而不仅仅是printf
-在出现故障时(例如malloc
…)感谢您的帮助,alk和Basile Starynkevitch!您可能想阅读以下内容:使用perror
-而不仅仅是printf
-在出现故障时(例如malloc
…)感谢您的帮助,alk和Basile Starynkevitch!谢谢你,弗拉德!我得到如下错误:(44)错误c2440'='无法从'void'转换为'input',(45)错误C2676:二进制'=':'input'未定义此运算符,(50)错误c2440'='无法从'input'转换为'input'。第(44)行是您使用realloc定义tmp的行。我不知道该如何修复此问题。你知道吗?在我将行更改为:struct input tmp;tmp=(结构输入)realloc(str,startNum*sizeof(结构输入));非常感谢你,弗拉德!!谢谢你,弗拉德!我得到如下错误:(44)错误c2440'='无法从'void'转换为'input',(45)错误C2676:二进制'=':'input'未定义此运算符,(50)错误c2440'='无法从'input'转换为'input'。第(44)行是您使用realloc定义tmp的行。我不知道该如何修复此问题。你知道吗?在我将行更改为:struct input tmp;tmp=(结构输入)realloc(str,startNum*sizeof(结构输入));非常感谢你,弗拉德!!