关于字符串指针
程序代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARR_LEN 5 #define BUF_LEN 100 char *custom_concat(char *[]); int main() { char *pStr[ARR_LEN] = { NULL }; for (int i = 0; i < ARR_LEN; i++) { pStr[i] = malloc(BUF_LEN * sizeof(char)); gets(pStr[i]); } printf("%s\n", custom_concat(pStr)); return 0; } char *custom_concat(char *pStr[]) { char *pResult = NULL; char *pTemp = NULL; int totalLen = 0; for (int i = 0; i < ARR_LEN; i++) { totalLen += strlen(pStr[i]); } pResult = malloc((totalLen + 1) * sizeof(char)); pTemp = pResult; /*这里不懂,难道不应该反过来写么*/ for (int i = 0; i < ARR_LEN; i++) { strncpy(pTemp, pStr[i], strlen(pStr[i])); pTemp += strlen(pStr[i]); } return pResult;/*明明没有对pResult赋值,要输出也应该是用pTemp啊*/ }编译及输出正常,但是不理解逻辑
习题9.3 定义一个函数,它的参数是字符串数组指针,返回一个将所有字符串合并起来的字符串指针,每个字符串都用换行符来终止。如果输入数组中的原字符串将换行符作为最后一个字符,函数就不能给字符串添加另一个换行符。编写一个程序,从键盘读入几个字符串,用这个函数输出合并后的字符串。
书上练习,网友的答案,请问 函数custom_concta() 是如何正确返回字符串的呢? 不知道是哪里对pResult 赋值了,不是只分配了内存么
个人理解 应该 把 pResult = pTemp; 放到第二个for后面,return前面。
或者直接使用*pResult 存储,为什么还要用一个*pTemp?
[此贴子已经被作者于2019-5-2 10:54编辑过]