注册 登录
编程论坛 C语言论坛

把字符串复制到另一个指针中,程序怎么不能正确复制过去

小白报道 发布于 2019-11-23 19:46, 1497 次点击
#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);
}
4 回复
#2
rjsp2019-11-23 20:59
无数的错误
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'?
#3
小白报道2019-11-23 23:11
回复 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输出字符串吗,还是只能使用数组输出
#4
forever742019-11-24 09:21
你的指针都漂出去几里路了,还怎么表示字符串?
你不觉得这个过程神似刻舟求剑么?

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

#5
rjsp2019-11-25 09:42
回复 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 );
}
1