c语言问题,将一个字符数组复制给另一个字符数组

#include<stdio.h>
#include<string.h>
void main()
{
char s1[90],s2[80];
int i=0;
printf("\nenter a string");
gets(s1);
do
{
s2[i]=s1[i];
i++;

}
while(s2[i-1]!=0); /*我在这里将i-1改成i,为什么效果是一样的呢?*/
puts(s2);

}
但是如果改成i的话,实际上s2[i]并没有初值啊?怎么可以作为循环的判断条件呢?

第1个回答  2012-05-09
效果就是一样的啊,你的条件是while(s2[i-1]!=0),不管怎样当s2[80]这个数组里有个'\0'它才会退出循环
第2个回答  2012-05-09
意思是当把数组里值为0的当作是结束的判断条件吧...如果你第一个数字就是0的话。。。那就有差别了呗...只是你测试的不是很特殊的情况...不具有普遍性撒本回答被提问者采纳
第3个回答  2012-05-09
因为你的 判断 while(s2[i-1]!=0); 这里的 s2[i] 和 s2[i-1]都不等于0, 你试试给s1赋个 有0的字符串看看追问

其实我想问的是i-1改成i后,s2[i]并没有赋初值啊?怎么还可以用来作为循环的判断条件呢?

追答

s2是没有赋初值 ,但是他是有值的。 因为你定义了s2[80],就分配了内存给他,它里面的值是系统的随机值。就是这个原因,我们在定义变量后一定要初始化,否则它的初值是不确定的。

c语言中怎样把一个字符数组付给另一个字符数组
用strcpy函数!原型声明:extern char *strcpy(char *dest,char *src);头文件:string.h 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。例子:include <stdio.h> include <string.h> ...

...利用指针,将一个字符数字复制到另一个字符数组。为何运行不出来...
strcpy(p,"Another beautiful string");(2)字符串q明显比p短,而定义的strcpy函数*from应该比*to短才可以,否则会出现错误,若改成 strcpy(q,p)就可以了,另外p,q本身就是指针(地址变量),因此实参传递时不能加

...中从第m个字符开始的全部字符复制到另一个字符串,m由用户输入_百度...
char a[N], b[N];\/\/定义两个长度相同的数组 cout << "请输入字符串:";gets_s(a);\/\/按照提示:利用字符输入函数进行字符串输入并存到a数组中 cout << "请输入m:";cin >> m;\/\/按照提示:输入指定复制元素起始坐标 for (i = 0; b[i - 1] != '\\0'; i++)\/\/遍历从指定元素开...

C语言取某个字符后的字符串存到另一个字符串
思路:先遍历字符串,如果找到该字符后,把后面的所有字符复制到另一个字符串。例如:include <stdio.h>#include <string.h>int main (){char ch1[]="123456789",ch2[20],a='4';int i=0,j=0;while(ch1[i++]!=a);while(ch1[i]){ch2[j++]=ch1[i++];}ch2[j]='\\0';puts(ch2)...

C语言如何把一个数组内的某个部分,拷贝至另一个数组(C Primer Plus 10...
为实现将数组中一部分元素拷贝至另一数组的功能,需编写一个函数,该函数接受源数组、目的数组及元素拷贝范围。以下示例展示了如何使用C语言完成此任务。首先,定义拷贝函数。此函数接收三个参数:源数组、目的数组及元素的起始索引和结束索引(不包含结束索引)。函数实现过程如下:c void copyArrayPart(int...

c语言:编写函数,将一个字符串数组a中的元音字母复制到另外一个字符串b...
void fun(char a[], char b[]){ char* vs="aeiouAEIOU";int l,i,j,k;l=strlen(a);k=0;for(i=0;i<l;i++){ for(j=0;j<10;j++){ if(a[i]==vs[j]){ b[k++]=a[i];break;} } } b[k]='\\0';} int main(){ char a[200];char b[200];printf("输入字符串:...

...将字符串数组中的一个元素赋给另一个字符串数组中的某个元素?_百度...
strcpy(str1[0], str2[1]);printf("%s %s", str1[0],str1[1]);--- 字符数组中的一个元素, 赋给另一个字符数组中的一个元素:include <stdio.h> int main(){ char str1[10],str2[10]="01234567";str1[3]=str2[5];printf("%c %c",str1[3],str2[5]);return 0;} ...

c++,c语言把一个字符串复制到另外一个字符串中。我不明白为什么要在复制...
因为str2[80]没有初始化的时候。编译器默认分配的字符,就是那些乱码 烫~~~输出puts函数是遇到'\0'结束符就结束字符串的输出,没有结束符标志自然全部输出,会有乱码 如果你不进行str2[i] = '\\0';赋值的话。那你在最开始 str2[80]要进行初始化 str2[80]=0;这样就一样的效果。有问...

...将一个字符串的第0,2,4,6,8……位置的字符复制到另一个字符串...
intmain(){ charstr1[]="123456",str2[7];inti,j=0,len;len=strlen(str1);for(i=len-1;i>=0;i--){ str2[j++]=str1[i];} str2[6]='\\0';printf("%s",str2);return0;} \/\/方法二指针法 include<stdio.h> include<string.h> intmain(){ charstr1[]="123456",*p,str2...

C语言取某个字符后的字符串存到另一个字符串
思路:先遍历字符串,如果找到该字符后,把后面的所有字符复制到另一个字符串。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> #include <string.h> int main () { char ch1[]="123456789",ch2[20],a='4'; int i=0,j=0; while(ch1[i++]!=a); while(...

相似回答