我需要分配t2
但我不知道具體如何。函數返回C中的反向字符串 - 分配
char *reverse(char *t)
{
int length= strlen(t);
char *t2 = (char *) malloc(length * sizeof(char*));
for(int i= (length-1);i>=0;i--)
t2[i]=t[length-1];
return t2;
}
請幫忙嗎?
我需要分配t2
但我不知道具體如何。函數返回C中的反向字符串 - 分配
char *reverse(char *t)
{
int length= strlen(t);
char *t2 = (char *) malloc(length * sizeof(char*));
for(int i= (length-1);i>=0;i--)
t2[i]=t[length-1];
return t2;
}
請幫忙嗎?
有與多個代碼錯誤。
前面提到的sizeof(char) != sizeof(char*)
前者是char的大小,第二個是指針的大小。
另外,僅環分配相同的值,所有指標在T2 t2[i]=t[length-1];
此外,還應採取const char*
作爲參數,所以即使爲const char *字符串可以傳遞給它。
沒有空字符\0
被設置在字符串的末尾。
此代碼應該這樣做:
char* reverse(const char *t)
{
int length= strlen(t);
char* t2 = (char*)malloc((length+1) * sizeof(char));
for(int i=0;i<length;i++)
{
t2[(length-1)-i]=t[i];
}
t2[length] = '\0';
return t2;
}
你很近。
char *t2 = malloc(length + 1); // reserve space for a null terminator
你可能想這個循環在length
開始,而不是length - 1
,雖然。循環內的賦值也是錯誤的(您只更改目標位置,而不是源代碼)。確保在返回字符串之前終止該字符串。
編輯注:
malloc()
返回值。sizeof(char)
是1
- 無需乘法。malloc()
。串逆轉可以就地完成在C.@AdrianJandl真的嗎?指針在64位系統上是4個字節?在嵌入式8位或16位系統中如何?你的評論是錯誤的 - 指針的sizeof是平臺特定的。 – 2013-03-05 19:48:05
@NikBougalis實際上你是對的,我一直忘記這一點,因爲我只在一臺指針長度爲4字節的機器上工作,我的不好。 – 2013-03-05 19:51:09
char *t2 = malloc(length*sizeof(char) + 1);
你的malloc一個指針零終止類型char加一
爲什麼不簡單地'長度+ 1'? – 2013-03-05 19:36:43
你是對的,但這是char的唯一情況。所有其他類型乘以它們的大小,所以爲什麼不在這裏爲對稱的原因 – 2013-03-05 19:38:18
@VladLazarenko這也是更清楚,所以OP可以更好地理解分配。 – Maroun 2013-03-05 19:38:44
您需要爲特殊''\ 0''字符指示字符串的結尾分配一個多字節。 – Maroun 2013-03-05 19:35:17
@Maroun,OP的問題幾乎可以肯定的是,他在這種情況下分配了太多的內存 - 注意乘以指針大小。 – 2013-03-05 19:35:57
@CarlNorum哦..我錯過了......當然,在這個修復之後,他需要再分配一個字節:) – Maroun 2013-03-05 19:36:34