所以我试图编写一个函数,它将接收两个指向chars的指针并返回一个指向它们串联的新指针。这是我的尝试:
#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(所以我可以返回它)?否则,我必须以某种方式递减指针,直到我回到开始。但是没有价值(比如&#39; \ 0&#39;对于字符串的结尾)会告诉我我在char数组的开头......
2)我读到我不能把sizeof()作为一个char指针,所以我不确定在我的append函数的第一行作为我对malloc的参数传递什么。 100只是一个足够大的&#34;我想摆脱的神奇数字......
如果我可以将sizeof()作为char指针,我只是这样做:
char *newArray = malloc(sizeof(strlen(start) + strlen(add)) + 1);
感谢您的帮助,
bclayman
答案 0 :(得分:2)
1)是的,您需要将指针保存到已分配内存的开头,以便您可以返回它。最好将该指针视为“真实”指针,并在将字符存储为临时时增加指针,但它确实没有区别 - 指针是指针
2)这就是strlen
的用途 - 它告诉你字符串的长度。所以你想要
char *newArray = malloc(strlen(start) + strlen(add) + 1);
根本不需要sizeof
。
有了这一切,你最终会得到:
char *append(char *start, char *add) {
char *newArray = malloc(strlen(start) + strlen(add) + 1);
if (!newArray) return 0; // out of memory
char *copy = newArray;
//get to end of start word
while (*start != '\0')
*copy++ = *start++;
while (*add != '\0')
*copy++ = *add++;
*copy = 0; // add a final NUL terminator
return newArray;
}