无法从另一个阵列设置数组大小

问题描述 投票:1回答:2

我需要数组(字符串),我希望第二个填充特殊字符(即'*'),具体取决于第一个字符的大小。例如,如果第一个是“TEST”,第二个应该是“****”

所以我有这个代码:

int i;
char arr_1[ ] = "TEST";
char *arr_2 = NULL;

arr_2 = malloc( strlen(arr_1) * sizeof(arr_1) );

if(arr_2 ==  NULL)
{
    printf("\nCouldn't allocate memory !");
    exit(0);
}

for(i = 0; i < strlen (arr_1); i++)
{
    arr_2[ i ] = '*';
}

printf("The new string is : %s ", arr_2);

free(arr_2);

问题是这实际上并没有工作,当我运行它时,我得到“****■@!” (最后是星星和一些奇怪的人物)。

需要帮助,谢谢

c arrays pointers dynamic-memory-allocation
2个回答
0
投票

您分配的内存超过了所需内存。由于内存未初始化,所以在单词后面有垃圾。

使用:

malloc(sizeof(arr_1)/sizeof(arr_1[0]));

0
投票

正如其他人所评论的那样,字符串的分配时间不够长。使用strlen,您需要分配strlen + 1。

arr_2 = malloc( strlen(arr_1) * sizeof(char) + 1);

当你通过for循环复制你的字符串时,你需要NULL终止字符串。

  int i;
  for (i = 0; i < strlen(arr_1); i++) {
    arr_2[i] = '*';
  }
  arr_2[i] = '\0';

上面的代码是有效的,因为for循环的最后一件事是增量并比较i。这意味着i等于字符串的长度。如果您需要限制i的范围,请将上述代码包装在do { ... } while(0);

使用malloc时,您应该始终假设分配的内存中充满了放射性垃圾数据。

© www.soinside.com 2019 - 2024. All rights reserved.