簡體   English   中英

將 memory 動態分配給 char * [] 的問題

[英]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時所有的cad0n-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM