| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1236 人关注过本帖
标题:把字符串复制到另一个指针中,程序怎么不能正确复制过去
只看楼主 加入收藏
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:4 
把字符串复制到另一个指针中,程序怎么不能正确复制过去
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    char *p1;
    char *p2;
    p1 = (char *)malloc(sizeof(char));
    p2 = (char *)malloc(sizeof(char[10]));

fgets(p1,11,stdin);
    for (; *p1 != '\n'; p1++,p2++)
    {
        p2 = p1;
    }
   
    printf("p1:%s\np2:%s\n", p1,p2);
}
搜索更多相关主题的帖子: 字符串 指针 char 复制 malloc 
2019-11-23 19:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
无数的错误
a. 既然 p1 = (char *)malloc(sizeof(char)); 只分配了一个char,那你的 fgets(p1,11,stdin) 中11怎么来的?
b. for (; *p1 != '\n'; p1++,p2++) ------ fgets获得的字符串未必有'\n'
c. p2 = p1; ------ 你想要的是 *p2 = *p1 吧
d. printf("p1:%s\np2:%s\n", p1,p2); ------ p1和p2在之前已经被你的p1++,p2++更改了
e. 即使没被改,那 %s 要求一个以'\0'结尾的字符串,但看你的代码 p2 指向的字符串哪里有'\0'?
2019-11-23 20:59
小白报道
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2019-9-17
收藏
得分:0 
回复 2楼 rjsp
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{
    char *p1;
    char *p2;
    p1 = (char *)malloc(sizeof(char[11]));
    p2 = (char *)malloc(sizeof(char[11]));
    fgets(p1,11,stdin);
    printf("p1:%s\n", p1);
    for (; *p1 != '\0'; p1++,p2++)
    {
        *p2 = *p1;
    }
    *p2 = '\0';
    printf("p2:%s\n", p2);
    _getch();
}
改了一下还是有一些问题    我想请问一下能用指针变量p2输出字符串吗,还是只能使用数组输出
2019-11-23 23:11
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
你的指针都漂出去几里路了,还怎么表示字符串?
你不觉得这个过程神似刻舟求剑么?

[此贴子已经被作者于2019-11-24 09:23编辑过]


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2019-11-24 09:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
回复 3楼 小白报道
程序代码:
#include <stdio.h>

int main( void )
{
    char a[11];
    if( !fgets(a,sizeof a,stdin) )
        return 1;

    char b[sizeof a];
    for( char *p=a,*q=b; ; ++p,++q )
    {
        *q = *p;
        if( *q == '\n' )
            *q = '\0';
        if( *q == '\0' )
            break;
    }
    puts( b );
}
2019-11-25 09:42
快速回复:把字符串复制到另一个指针中,程序怎么不能正确复制过去
数据加载中...
 
   



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

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