我必须要数组(字符串),并且我要根据第一个字符的大小将第二个字符用特殊字符(即'*')填充。 例如,如果第一个是“ 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);
问题是这实际上没有用,当我运行它时,我得到“ ****■@!” (星号和一些怪异的字符)。
需要帮助,谢谢
答案 0 :(得分:0)
您分配的内存超出了要求。由于内存未初始化,因此单词后面有垃圾。
使用:
malloc(sizeof(arr_1)/sizeof(arr_1[0]));
答案 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
时,应始终假定分配的内存已充满了放射性垃圾数据。