#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *words[] = {"mHello", "kWorld", "kHow", "9Are", "3You?"};
char **parsed = malloc(5);
int i;
for (i = 0; i < 5; i++)
{
int n = strlen(words[i]);
parsed[i] = malloc(n);
strncpy(parsed[i], words[i] + 1, n);
printf("[%s] ", parsed[i]);
}
printf("\n----------------------\n");
for (i = 0; i < 5; i++)
printf("[%s] ", parsed[i]);
return 0;
}
parsed[i]
包含不带第一个字符的words[i]
。输出是
[Hello] [World] [How] [Are] [You?]
----------------------
[▒▒ o] [World] [How] [Are] [You?]
为什么第一个printf调用
parsed[0]
可以正常工作,而第二个没有正常工作?此外,如果我从
words
中删除一个元素,则此代码可以正常工作。怎么回事? 最佳答案
您的malloc
没有为指向字符串的指针分配正确的空间,但是应该是
parsed = malloc(sizeof(char*)*5)
关于c - 为什么要为该数组中的第一个元素打印垃圾?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10178369/