Столкнулся с некоторой проблемой со следующим фрагментом кода ... Что-то не так? - PullRequest
1 голос
/ 11 мая 2011

Я не могу использовать xstrcpy для копирования и печати, и он печатает пустую строку, когда я пытаюсь напечатать всю строку в main, хотя в цикле while печатается каждый символ ... но не строка сразу под циклом while. ..Не знаю, почему это происходит: (

Код:

#include<stdio.h>
#include<stdlib.h>
int xstrlen(char *);
char * xstrcpy(char *,char *);
main()
{
    char *expptr1="Hello World";
    char *expptr2 = "Hello Again";
    char *expptr3;
    printf("%d\n",xstrlen(expptr1));
    expptr3 = xstrcpy(expptr1,expptr2);
    printf("%s\n",expptr3);
}

int xstrlen(char *ptr)
{
    //printf("I am here\n");
    int count = 0;
    while(*ptr++!='\0')
        count++;
    return count;
}

char * xstrcpy(char *ptr1,char *ptr2)
{
    int i=xstrlen(ptr2);
    printf("%s\n",ptr1);
    printf("%s\n",ptr2);
    ptr1 =(char *)malloc(i);
    //printf("i am here\n");
    while(*ptr2 != '\0')
    {
        *ptr1 = *ptr2;
        printf("%c\n",*ptr1);
        ptr1++;
        ptr2++;
    }
    printf("%s",ptr1);
    return ptr1;
}

Выход:

11
Hello World
Hello Again
H
e
l
l
o

A
g
a
i
n
ׁׁ

Exited: ExitFailure 4

1 Ответ

4 голосов
/ 11 мая 2011

Вы изменили адрес указателя ptr1 при копировании строки. Таким образом, к тому времени, когда вы печатаете ptr1, он фактически указывает на конец строки, который является некоторым значением мусора.

Итак, вам нужно сохранить ptr1 в начале xstrcpy и вернуть этот начальный адрес, и это, я думаю, правильно выведет ptr1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...