回 帖 发 新 帖 刷新版面

主题:字符指针与数组求教

刚学C语言,关于指针这一块有点不明白。希望各位大哥帮帮忙
问题1:
char a[]="I love you!"和char a[]={"I love you!"}有啥区别?
问题2:
将字符串a连拦到字符串b后面。
a="I am a boy."
b="I love you "
要实现的结果为:I love you I am a boy.

正确代码如下:
void main()
{
    void strcate(char *from,char *to);
    char a[]="I am a boy.",b[25]="I love u ",*p1,*p2;
    p1=a;p2=b;    
    strcate(p1,p2);
    printf("string a is:%s\n",p1);
    printf("string b is:%s\n",p2);
    system("pause");
}
void strcate(char *from,char *to)
{
        while(*to != '\0')
        {
            *to ++;
        }
        while(*from != '\0')
        {
            *to ++ = *from++;
        }
        *to='\0';
}

错误代码如下:
void main()
{
    void strcate(char *from,char *to);
    char a[]="I am a boy.",b[25]="I love u ",*p1,*p2;
    p1=a;p2=b;    
    strcate(p1,p2);
    printf("string a is:%s\n",p1);
    printf("string b is:%s\n",p2);
     system("pause");
}
void strcate(char *from,char *to)
{
    for (;*from!='\0';from++)
    {
        for (;*to!='\0';to++)
        {
           if (*to=='\0')
           {
            *to=*from;
            break;
             }
        }
        *(to+1)='\0';
    }
}
错误原因是,当第二个FOR循环到to='\0'时IF语句不执行。

正确的与错误的代码,思路都是让to指针指向的地址的值等于\0时,把from指向的地址的值赋值给to

为什么FOR的就不能成功?求高人帮忙~

回复列表 (共3个回复)

沙发

#include<stdio.h>

void main()
{
    void strcate(char *from,char *to);
    char a[]="I am a boy.",b[25]="I love u ",*p1,*p2;
    p1=a;p2=b;    
    strcate(p1,p2);
    printf("string a is:%s\n",p1);
    printf("string b is:%s\n",p2);
     system("pause");
}
void strcate(char *from,char *to)
{
    for (;*from!='\0';from++)
    {
        for (;*to!='\0';to++)
        {}
         if (*to=='\0')
           {
            *to=*from;
            *(to+1)='\0';
             }
        
    }
}

板凳

第一个问题两者是一样的,都可以对数组进行初始化~
第二个问题是由于strcate函数进行了覆盖赋值~

3 楼

问题1:Visual C++试验,没区别。但一般都用第一种写法。
问题2:while语句与for语句其实没有本质区别。楼主在学习时只需要知道“如何写出正确的代码”,而不必执着于“如何修改错误代码”。待熟悉之后,不论是写代码还是修改错误,就都能顺利完成了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册