鱼C论坛

 找回密码
 立即注册
查看: 1054|回复: 7

[已解决]字符串与指针

[复制链接]
发表于 2022-3-7 20:26:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        char nb(char *a,char *b);
        char *a="shdajsdg",b[40]="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:19:15
无聊卷旅 发表于 2022-3-7 21:11
我是在copy,不是在赋值,我就想知道它们俩为什么不一样

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

  1. #include <stdio.h>

  2. void nb(char *a, char *b) {
  3.     printf("==========%p\n", b);
  4.     printf("%s\n", b);
  5.     while((*b++ = *a++) != '\0');
  6.     printf("==========%p\n", b);
  7.     printf("%s\n", b);
  8. }

  9. int main() {
  10.     //char nb(char *a, char *b);
  11.     char *a = "shdajsdg", b[40] = "dadsdas";
  12.     printf("%s\n\n%s\n", a, b);
  13.     nb(a, b);
  14.     // printf("%s\n",b); printf放这里可以实现打印为什么放下面的那个就不行了
  15.     return 0;
  16. }

  17. /*
  18. char nb(char *a, char *b) {
  19.     while((*b++ = *a++) != '\0');
  20.     //{ ; } ???
  21.     // printf("%s\n",b);               放这里打不出来
  22.     //return ???
  23. }
  24. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 21:00:15 | 显示全部楼层
  1. char nb(char *a,char *b)
  2. {
  3.     while((*b++=*a++)!='\0');
  4.         {
  5.                 ;
  6.                   }         
  7.         //printf("%s\n",b);               放这里打不出来
  8. }
复制代码

你想给一个指针赋值,直接这样就好,不必这么麻烦
  1. b = a;
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-7 21:11:49 | 显示全部楼层
大马强 发表于 2022-3-7 21:00
你想给一个指针赋值,直接这样就好,不必这么麻烦


我是在copy,不是在赋值,我就想知道它们俩为什么不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-7 21:19:15 | 显示全部楼层    本楼为最佳答案   
无聊卷旅 发表于 2022-3-7 21:11
我是在copy,不是在赋值,我就想知道它们俩为什么不一样

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

  1. #include <stdio.h>

  2. void nb(char *a, char *b) {
  3.     printf("==========%p\n", b);
  4.     printf("%s\n", b);
  5.     while((*b++ = *a++) != '\0');
  6.     printf("==========%p\n", b);
  7.     printf("%s\n", b);
  8. }

  9. int main() {
  10.     //char nb(char *a, char *b);
  11.     char *a = "shdajsdg", b[40] = "dadsdas";
  12.     printf("%s\n\n%s\n", a, b);
  13.     nb(a, b);
  14.     // printf("%s\n",b); printf放这里可以实现打印为什么放下面的那个就不行了
  15.     return 0;
  16. }

  17. /*
  18. char nb(char *a, char *b) {
  19.     while((*b++ = *a++) != '\0');
  20.     //{ ; } ???
  21.     // printf("%s\n",b);               放这里打不出来
  22.     //return ???
  23. }
  24. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-7 21:45:33 | 显示全部楼层
人造人 发表于 2022-3-7 21:19
b一直++,都指到 '\0' 后面去了,还可以输出?


当*b++=*a++==‘0’时候不是为0,判断为假,停止运行。这样不对吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

执行这个代码,看一下输出结果,能不能理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-7 21:48:35 | 显示全部楼层
人造人 发表于 2022-3-7 21:46
执行这个代码,看一下输出结果,能不能理解

好的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-7 22:10:18 | 显示全部楼层
人造人 发表于 2022-3-7 21:46
执行这个代码,看一下输出结果,能不能理解

感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表