无聊卷旅 发表于 2022-3-7 20:26:35

字符串与指针

#include<stdio.h>
int main()
{
        char nb(char *a,char *b);
        char *a="shdajsdg",b="dadsdas";
        printf("%s\n\n%s\n",a,b);
        nb(a,b);
        //printf("%s\n",b);                  printf放这里可以实现打印为什么放下面的那个就不行了
        return 0;
}
char nb(char *a,char *b)
{
    while((*b++=*a++)!='\0');
        {
                ;
                  }          
        //printf("%s\n",b);               放这里打不出来
}
   

大马强 发表于 2022-3-7 21:00:15

char nb(char *a,char *b)
{
    while((*b++=*a++)!='\0');
      {
                ;
                  }         
      //printf("%s\n",b);               放这里打不出来
}
你想给一个指针赋值,直接这样就好,不必这么麻烦
b = a;

无聊卷旅 发表于 2022-3-7 21:11:49

大马强 发表于 2022-3-7 21:00
你想给一个指针赋值,直接这样就好,不必这么麻烦

我是在copy,不是在赋值,我就想知道它们俩为什么不一样

人造人 发表于 2022-3-7 21:19:15

无聊卷旅 发表于 2022-3-7 21:11
我是在copy,不是在赋值,我就想知道它们俩为什么不一样

b一直++,都指到 '\0' 后面去了,还可以输出?

#include <stdio.h>

void nb(char *a, char *b) {
    printf("==========%p\n", b);
    printf("%s\n", b);
    while((*b++ = *a++) != '\0');
    printf("==========%p\n", b);
    printf("%s\n", b);
}

int main() {
    //char nb(char *a, char *b);
    char *a = "shdajsdg", b = "dadsdas";
    printf("%s\n\n%s\n", a, b);
    nb(a, b);
    // printf("%s\n",b); printf放这里可以实现打印为什么放下面的那个就不行了
    return 0;
}

/*
char nb(char *a, char *b) {
    while((*b++ = *a++) != '\0');
    //{ ; } ???
    // printf("%s\n",b);               放这里打不出来
    //return ???
}
*/

无聊卷旅 发表于 2022-3-7 21:45:33

人造人 发表于 2022-3-7 21:19
b一直++,都指到 '\0' 后面去了,还可以输出?

当*b++=*a++==‘0’时候不是为0,判断为假,停止运行。这样不对吗

人造人 发表于 2022-3-7 21:46:34

无聊卷旅 发表于 2022-3-7 21:45
当*b++=*a++==‘0’时候不是为0,判断为假,停止运行。这样不对吗

执行这个代码,看一下输出结果,能不能理解

无聊卷旅 发表于 2022-3-7 21:48:35

人造人 发表于 2022-3-7 21:46
执行这个代码,看一下输出结果,能不能理解

好的

无聊卷旅 发表于 2022-3-7 22:10:18

人造人 发表于 2022-3-7 21:46
执行这个代码,看一下输出结果,能不能理解

感谢
页: [1]
查看完整版本: 字符串与指针