想要不用strcpy复制字符数组
[*]#include <stdio.h>
#include<string.h>
#define N 80
int main()
{
char a,b;
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’后面的字符不复制
为什么我这个函数不行呢 b=a 你想干嘛,这个语句比较疑惑 #include <stdio.h>
#include <string.h>
#define N 80
int main()
{
char a, b;
gets(a); // 输入字符串
for (int i = 0; i < strlen(a); ++i) // <------------ 注意这里 i < strlen(a)
{
b = a;
}
b = '\0';// <------------ 注意这里 '\0' 循环后才赋值
printf("%s", b); // <------------ 注意这里 %s
return 0;
} wp231957 发表于 2022-5-24 17:47
b=a 你想干嘛,这个语句比较疑惑
b=a,不知道咋复制过来没了
傻眼貓咪 发表于 2022-5-24 17:49
这样也不行啊
C:\Users\addendum\Desktop 傻眼貓咪 发表于 2022-5-24 17:49
改了也不行啊 addendum777 发表于 2022-5-26 20:34
改了也不行啊
(一)请问你输入的是合法字符串吗?(为什么中间多个 '\0' 空符?)
(二)请问有报错信息吗? 楼主先应该学会发帖时插入代码
///////不然发完帖子不显示且后面全变成斜体,是斜体的意思 这还不简单for循环for ( int i = 0; strlen(str)+1; i++){b = a;}加上for循环一共才两行,你那个b=a就疑惑,数组直接赋值?这能编译过? 而且if(a==0)是什么,你栈申请的数组还Not NULL一下?你是要写if(a==0)?你这么写还是复制到\0之前 题主你好,我认为楼主可能在两个知识点上出了点问题。
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函数中声明,然后使用它。感觉这样才是函数 SR83694402 发表于 2022-6-1 09:40
题主你好,我认为楼主可能在两个知识点上出了点问题。
1.数组间不能通过 b=a 之类的赋值语句直接把a数组的 ...
不是的,a后面还有方框和i,由于我不会插入代码,不知道怎么后面就没了,而那个\0是书上的例题,它的输入中包含了\0,并非我奇怪地要输入\0 jhq999 发表于 2022-5-27 18:37
楼主先应该学会发帖时插入代码
谢谢,我去看看怎么插入代码 #include <stdio.h>
void my_strcopy(char* destination, const char* source)
{
while (*destination++ = *source++)
{
;
}
}
int main(void)
{
char arr1 = "xxxxxxxxxxxxxxxxxx";
char arr2[] = "hello";
my_strcopy(arr1, arr2);
printf("%s", arr1);
return 0;
}
注意:数组不支持变量名给另一个数组直接赋值
#include <stdio.h>
#include <string.h>
#define N 80
int main()
{
char a = {0}, b = {0};//定义数组a,b同时进行初始化
gets(a); // 输入字符串
for (int i = 0; i < strlen(a); i++) //复制有效字符
{
b = a;
}
b = '\0';//数组b补结束符'\0'
printf("%s\n", b);//打印数组b
return 0;
}
页:
[1]