[英]problems allocating memory dynamically to char * []
我的问题是我的程序只注册了cad[]中的最后一个单词:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 4
void main()
{
char *cad[N];
for(int i=0;i<N;i++)
{
char word[100];
printf("Escribe algo : ");
scanf("%s",word);
cad[i] = (char*)malloc((strlen(word)+1)*sizeof(char));
cad[i] = word;
}
for (int i = 0; i < N; i++)
printf("%s\n",cad[i]); //just print the last word registered
}
例如,想法是如果cad[1] = "Hello", ...cad[n] = "Yea"
,所有单词都注册在各自的字段中,但是当我printf
时所有的cad
从0
到n-1
所有的cad[i]
只记录最后一个单词"yea"
。
有什么问题,我该如何解决?
word
变量在堆栈上分配,并经过优化以在读取单词的 for 的每个循环中重用。
话虽如此,您正在用word
的地址覆盖分配的 memory 地址,因此您只需丢弃分配的 memory。 因此cad
中的每个元素都将指向word
地址,该地址将保存最后读取的字。
你需要做的是利用strcpy
function复制分配空间中word的内容:
strcpy(cad[i], word);
此外,一个好的做法是在完成使用后free
你的 malloc'd memory:
for (int i = 0; i < N; i++)
{
free(cad[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.