繁体   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