[英]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.