鱼C论坛

 找回密码
 立即注册
查看: 1655|回复: 13

想要不用strcpy复制字符数组

[复制链接]
发表于 2022-5-24 17:19:37 | 显示全部楼层 |阅读模式

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

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

x
  • #include <stdio.h>
    #include<string.h>
    #define N 80

    int main()
    {
            char a[N],b[N];
            int i;
            gets(a); //输入数组a;
           
            for(i=0;i<=strlen(a);i++)
            {b=a;
                    if(a=='\0')
                    break;
            }
           
            for(i=0;i<strlen(a);i++)
            printf("%c",b) ;

            return 0;
    }

要求复制时‘\0’也要复制,而‘\0’后面的字符不复制




为什么我这个函数不行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-24 17:47:41 From FishC Mobile | 显示全部楼层
b=a   你想干嘛,这个语句比较疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-24 17:49:07 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 80

  4. int main()
  5. {
  6.     char a[N], b[N];
  7.     gets(a); // 输入字符串
  8.    
  9.     for (int i = 0; i < strlen(a); ++i) // <------------ 注意这里 i < strlen(a)
  10.     {
  11.         b[i] = a[i];
  12.     }
  13.    
  14.     b[strlen(a)] = '\0';  // <------------ 注意这里 '\0' 循环后才赋值
  15.     printf("%s", b); // <------------ 注意这里 %s
  16.    
  17.     return 0;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 20:27:22 | 显示全部楼层
wp231957 发表于 2022-5-24 17:47
b=a   你想干嘛,这个语句比较疑惑

b=a,不知道咋复制过来没了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 20:32:58 | 显示全部楼层

这样也不行啊
C:\Users\addendum\Desktop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 20:34:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-27 12:26:34 From FishC Mobile | 显示全部楼层
addendum777 发表于 2022-5-26 20:34
改了也不行啊

(一)请问你输入的是合法字符串吗?(为什么中间多个 '\0' 空符?)
(二)请问有报错信息吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-27 18:37:34 | 显示全部楼层
楼主先应该学会发帖时插入代码
  1. [i]///////不然发完帖子[i]不显示且后面全变成斜体,[i]是斜体的意思
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 07:30:25 | 显示全部楼层
这还不简单for循环for ( int i = 0; strlen(str)+1; i++)  {b[i] = a[i];}加上for循环一共才两行,你那个b=a就疑惑,数组直接赋值?这能编译过? 而且if(a==0)是什么,你栈申请的数组还Not NULL一下?你是要写if(a[i]==0)?你这么写还是复制到\0之前
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 09:40:41 | 显示全部楼层
题主你好,我认为楼主可能在两个知识点上出了点问题。
1.数组间不能通过 b=a 之类的赋值语句直接把a数组的值赋给b数组。数组的名字,即a,b,它在本质上是一个指向字符数组的指针常量。它就像其他常量一样,比如说整型常量,1,2,3,4……等等,它的值是不能被更改的。b=a这条语句,就相当于 3=5 这条语句,本质上它们都是常量,值是不可以更改的。
2. 从键盘输入的'\0'和表示字符串结束的’\0'其实不是一回事,即使题主输入一个含有’\0‘的字符串,这个字符串仍会被完整的输出。从键盘输入的字符串,实际上都被放进了键盘缓冲区中,当按下enter键时,程序开始从缓冲区获取输入字符(这个并不是重点)。这里以把输入的数据写入字符数组为例,对于scanf函数来说,只有当程序检测到空格或者回车时,才停止把字符写入字符数组,然后在字符数组末尾自动添加一个’\0';对于gets函数来说,只有当检测到回车时,才停止把字符写入字符数组,然后在字符数组末尾自动添加一个‘\0'。也就是说,除了空格或者是回车,输入的内容都会被写入字符串数组。

我也刚学c语言没有多久,如果能有错误的地方还请指正,希望可以帮助到你。
另:四楼的程序是完全正确的。
函数的写法应该是在main函数外定义一个字符串复制函数,然后在main函数中声明,然后使用它。感觉这样才是函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-7 12:08:53 | 显示全部楼层
SR83694402 发表于 2022-6-1 09:40
题主你好,我认为楼主可能在两个知识点上出了点问题。
1.数组间不能通过 b=a 之类的赋值语句直接把a数组的 ...

不是的,a后面还有方框和i,由于我不会插入代码,不知道怎么后面就没了,而那个\0是书上的例题,它的输入中包含了\0,并非我奇怪地要输入\0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-7 12:10:08 | 显示全部楼层
jhq999 发表于 2022-5-27 18:37
楼主先应该学会发帖时插入代码

谢谢,我去看看怎么插入代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 00:07:38 | 显示全部楼层
#include <stdio.h>

void my_strcopy(char* destination, const char* source)
{
        while (*destination++ = *source++)
        {
                ;
        }
}

int main(void)
{
        char arr1[20] = "xxxxxxxxxxxxxxxxxx";
        char arr2[] = "hello";

        my_strcopy(arr1, arr2);
        printf("%s", arr1);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-10 09:59:39 | 显示全部楼层

注意:数组不支持变量名给另一个数组直接赋值


  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 80

  4. int main()
  5. {
  6.     char a[N] = {0}, b[N] = {0};//定义数组a,b同时进行初始化
  7.     gets(a); // 输入字符串
  8.     for (int i = 0; i < strlen(a); i++) //复制有效字符
  9.     {
  10.         b[i] = a[i];
  11.     }
  12.     b[strlen(a)] = '\0';//数组b补结束符'\0'
  13.     printf("%s\n", b);//打印数组b
  14.     return 0;
  15. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-5 12:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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