| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1668 人关注过本帖
标题:关于字符串指针
只看楼主 加入收藏
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
收藏
已结贴  问题点数:10 回复次数:4 
关于字符串指针
程序代码:
#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编辑过]

搜索更多相关主题的帖子: 字符串 指针 char int for 
2019-05-02 10:32
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
收藏
得分:0 

1:某人的门牌号家人知道,此处由家人转告了邻居自家门牌号是啥,就这个意思
2:malloc函数调用后赋值了

malloc()函数是标准库函数,具体作用百度
搞懂它的含义你的疑问就解决了
2019-05-03 00:49
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
收藏
得分:0 
回复 2楼 Mr_doge
请问其中不使用 *pTemp 可以么,使用它的目的是什么呢?
2019-05-04 14:16
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:5 
以下是引用bxe在2019-5-2 10:32:25的发言:
    pTemp = pResult;  /*这里不懂,难道不应该反过来写么*/
    return pResult;/*明明没有对pResult赋值,要输出也应该是用pTemp啊*/


pTemp = pResult;//pTemp指针指向pResult的首地址,接下来操作pTemp就相当于操作pResult
return pResult;//经for循环里面的操作后pResult的内容已经改变,但是此时pTemp指向分配的末地址,返回末地址没用,所以返回pResult首地址
2019-05-04 19:06
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
收藏
得分:5 
回复 3楼 bxe
根据实际上下文语义的话,不可以,该指针变量用作指针运算,起到类似缓冲区、缓存的作用,就像写信的信纸一般,没了信纸就不是写字了。
2019-05-04 19:40
快速回复:关于字符串指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095791 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved