c - 面对以下代码的一些问题......有什么问题吗?

标签 c

我无法使用 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

最佳答案

您在复制字符串时更改了 ptr1 的指针地址。所以当你打印出 ptr1 时,它实际上指向了字符串的末尾,这是一些垃圾值。

所以您需要做的是将 ptr1 保留在 xstrcpy 的开头并返回该起始地址,我认为这将正确打印出 ptr1。

关于c - 面对以下代码的一些问题......有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968681/

相关文章:

c - 变量不更新,而循环不工作

c++ - 如何在 C++ 中将命令行字符串转换为 hwnd?

c - 为什么 free(pointer) 会出现运行时错误?

c++ - 与 c/c++ 中的结构指针混淆

c - libxml2:如何按升序和降序对 xmlNode 结果进行排序?

c - 我在 c 中打印 unsigned long 的范围时遇到困难

c - 将二维动态行分配给一维数组

c - 我如何通过 C90 中的函数传递 va_list

c++ - Fputc 在 if else 中不起作用

c - 为什么这些 C 宏不写成函数呢?