我需要数组(字符串),我希望第二个填充特殊字符(即'*'),具体取决于第一个字符的大小。例如,如果第一个是“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);
问题是这实际上并没有工作,当我运行它时,我得到“****■@!” (最后是星星和一些奇怪的人物)。
需要帮助,谢谢
您分配的内存超过了所需内存。由于内存未初始化,所以在单词后面有垃圾。
使用:
malloc(sizeof(arr_1)/sizeof(arr_1[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
时,您应该始终假设分配的内存中充满了放射性垃圾数据。