我必须创建一个连接两个字符串的函数,但我必须在第一个单词后添加“\n”。我弄清楚了一切,但由于某种原因它没有打印出任何东西。有任何想法吗?它可能必须对指针做一些事情。我就是无法理解他们。这是代码。
char *function(char *s1, char *s2){
char *newStr;
int size;
size = strlen(s1) + strlen(s2);
newStr = (char *)malloc((size+1)*sizeof(char));
while(*s1!= '\0'){
*newStr = *s1;
newStr++;
s1++;
}
*newStr = '\n';
newStr++;
while(*s2 != '\0'){
*newStr = *s2;
newStr++;
s2++;
}
*newStr = '\0';
return newStr;
}
int main (int argc, const char * argv[]) {
char *str1 = "Hello";
char *str2 = "World";
printf("%s",function(str1, str2));
return 0;
}
所以结果我应该得到:
Hello
World
但我没有得到任何返回。
最佳答案
您返回的是指向缓冲区末尾的指针,而不是指向缓冲区开头的指针。看一下函数的最后两行:
*newStr = '\0';
return newStr;
显然,这会返回一个指向 null char
的指针,即空字符串。
通过引入一个临时指针来解决该问题,您将使用该指针逐步遍历输出缓冲区。然后您可以将指针返回到输出缓冲区的开头。
char *function(char *s1, char *s2){
int size = strlen(s1) + strlen(s2) + 2;//one for '\n', one for '\0'
char *result = malloc(size);
char *p = result;
while(*s1 != '\0'){
*p = *s1;
p++;
s1++;
}
*p = '\n';
p++;
while(*s2 != '\0'){
*p = *s2;
p++;
s2++;
}
*p = '\0';
return result;
}
您还需要为 \n
分配一个额外的字符,如上所示。最后,您的调用代码永远不会释放 function
分配的内存。
关于c - 函数不打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9861110/