0
所以我想寫一個函數,將採取兩個指針字符並返回一個新的指針,以他們的連接。這裏是我的嘗試:Tricky C字符指針問題
#include <stdio.h>
#include <stdlib.h>
char * append (char *, char *);
int main(void) {
char *start = "start";
char *add = "add";
char* newString = append(start, add);
printf("%s\n", newString);
return 0;
}
char * append(char *start, char *add) {
char *newArray = malloc(sizeof(char) * 100);
//get to end of start word
while (*start != '\0') {
*newArray = *start;
newArray++;
start++;
}
while (*add != '\0') {
*newArray = *add;
newArray++;
add++;
}
return newArray;
}
兩個問題:
1)截至目前它編譯但沒有被打印出來。我認爲這是因爲我的append函數返回一個指向串聯字符末尾的指針。我應該創建一個臨時字符指針,並在開始時將它設置爲newArray(所以我可以返回它)?否則,我必須以某種方式減少我的指針,直到我重新開始。但沒有任何價值(像'\ 0'的字符串的末尾),這將告訴我我在字符數組的開始處...
2)我讀到,我不能只是採取sizeof()是一個char指針,所以我不確定在我的append函數的第一行中作爲我的參數傳遞給malloc。 100只是一個「足夠大的」幻數,我想擺脫...
如果我能採取的sizeof()一個字符指針,我只是做:
char *newArray = malloc(sizeof(strlen(start) + strlen(add)) + 1);
感謝您的幫助,
bclayman
是更完整的你認爲在運算的架構有一個8位char類型的大小。 – rhubarbdog
@rhubarbdog:根據定義,'sizeof(char)== 1'總是 - 字符中的位數不會進入它。沒有任何理由在程序中使用'sizeof(char)'。 –