huangch 发表于 2008-7-21 14:45

strcpy函数与main函数的实现不了?

#include<stdio.h>

char strcpy(char *s, char *t)
{
    while (*s++ = *t++)
        ;
        return *s;
}

void main()
{
        char *s = "I love ";
        char *t = "China!";
        char *a = " ";

        strcpy(s, t);
        while(*a++ = *s++)
                 ;
    printf("%s\n",a);
}
此程序在编译器中并没有错误,
但为什么编译器会没有结果呢?
请高手帮帮忙!

病书生 发表于 2008-7-21 15:05

strcpy应该包含#include<string.h>吧

sxn0508 发表于 2008-7-21 15:15

囧,你没发现这几个字符串其实都是常量么?

huangch 发表于 2008-7-21 15:27

回复 3# sxn0508 的帖子

本人刚学c的;
我大概根据师兄你的提示;
将程序改为:
#include<stdio.h>
#include<string.h>

void strcpy(char *s, char *t)
{
    while (*s++ = *t++)
        ;
}

void main()
{
        char *str1 = "I love ";
        char *str2 = "China!";
        char *a = " ";

        strcpy(str1, str2);
        while(*a++ = *str1++)
                 ;
    printf("%s\n",a);
}
可编译器还是没有结果?
究竟是什么原因?
要怎样修改才行?

netsolo 发表于 2008-7-21 16:12

[quote][bo][un]huangch[/un] 在 2008-7-21 14:45 的发言:[/bo]


[color=Red]        char *s = "I love ";
        char *t = "China!";
        char *a = " ";[/color]





[tk13]

lingluoz 发表于 2008-7-21 16:15

while(*a++ = *str1++) 這一句已經把a移到字符串結束的那個\0上面了
當然沒有結果哈

huangch 发表于 2008-7-21 16:31

回复 6# lingluoz 的帖子

[em08]
不是很懂?

huangch 发表于 2008-7-21 16:43

将程序改成这样:
#include<stdio.h>
#include<string.h>

void strcpy(char *s, char *t)
{
    while (*s++ = *t++)
        ;
}

void main()
{
        char *str1 = "I love ";
        char *str2 = "China!";

        strcpy(str1, str2);
    printf("%s\n",str1);
}
还是看不出结果来?
究竟错在哪里?

独孤小梦 发表于 2008-7-21 16:49

汗,这里很容易理解!你只需要在把S,T回到原来的地方就行!
这里回到S=I LOVE!
    T=CHINA!大约就可以了!
有什么错误的,请大为指正,谢谢!

[[it] 本帖最后由 独孤小梦 于 2008-7-21 16:50 编辑 [/it]]

huangch 发表于 2008-7-21 18:33

[quote][bo][un]独孤小梦[/un] 在 2008-7-21 16:49 的发言:[/bo]

汗,这里很容易理解!你只需要在把S,T回到原来的地方就行!
这里回到S=I LOVE!
    T=CHINA!大约就可以了!
有什么错误的,请大为指正,谢谢!

[ 本帖最后由 独孤小梦 于 2008-7-21 16:50  ... [/quote]
请问
怎样回啊??

hello_moto 发表于 2008-7-21 18:52

没有什么回不回的问题。
在你8#程序的基础上,把
    char *str1 = "I love ";
    char *str2 = "China!";
改成
    char str1[] = "I love ";
    char str2[] = "China!";
就可以了。

huangch 发表于 2008-7-21 19:03

[quote][bo][un]hello_moto[/un] 在 2008-7-21 18:52 的发言:[/bo]

没有什么回不回的问题。
在你8#程序的基础上,把
    char *str1 = "I love ";
    char *str2 = "China!";
改成
    char str1[] = "I love ";
    char str2[] = "China!";
就可以了。 [/quote]
谢谢!
是可以了!
但小弟在其中的原理上,并不是很明白!
指针不是指向其地址吗?
为什么这样定义不行呢?
char *str1 = "I love ";
char *str2 = "China!";

sunkaidong 发表于 2008-7-21 19:48

"I love ";
字符串常量,常量的修改肯定失败。数组就没这个限制了

chengli 发表于 2008-7-21 20:01

这样能行了

#include<stdio.h>

void strcpy(char *s, char *t)
{
    while (*s++ = *t++)
        ;
}

void main()
{
    char str1[] = "I love ";
    char str2[] = "China!";
    strcpy(str1, str2);
    printf("%s\n",str1);
}

蓝色神话 发表于 2008-7-21 20:02

1、不知你的return有什么用。
2、你的指针s所存储的地址发生了改变。
3、建议学会调试程序,其实这样的错误单步一下很容易发现。

页: [1]

编程论坛