[英]Why is garbage being printed for the first element in this array?
#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)
對於初學者來說,“ **parsed
不足以存儲在那里的所有指針。 應該分配
parsed=malloc(sizeof(*parsed)*5);
您可以滾動單個字符串分配,然后將其全部復制為一個:
parsed[i]=strdup(words[i]+1);
這也可以正確處理字符串的長度,現在乍一看似乎有一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.