三九宝宝网宝宝教育教学论文

关于C语言strcpy函数的练习题球详细解!

02月25日 编辑 39baobao.com

[C语言关于函数的递归]你的递归程序是错的,我转来个对的,带讲解的,你看看。 语言函数的递归和调用 一、基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己。 要点: 1...+阅读

A.我认为运行是可以运行但是可能会出现问题。 首先s1[]是字符数组,数组名s1代表该数组的首地址(也就是第一个字符对应的地址) 因为调用strcpy(s1,"string2"); 时,是将s1和"string2"两个字符串的首地址(也就是第一个字符对应的地址)作为形参传给函数,然后函数通过首地址将"string2"中的每个元素复制到字符串s1对应的首地址后的内存空间中,但是原先s1只向系统申请了7个字节的空间,但"string2"有八个字符,最后的那个'2'被复制到了原先没有申请的空间中。虽然是可以运行,但是我们不知道'2'被复制到的那个空间中原先有没有数据,没有的话自然没事;如果原先就有数据的话,会将原先的那个数据覆盖掉,可能对程序的稳定性乃至系统的稳定性都有一定影响。虽然运行可以运行,但决不推荐这么做。

B。情况同A,但这种情况是合法的。楼上说修改常量。但strcpy执行后只是将数组首地址“值传递”到函数中,运行完后函数接收到的形参就释放了,只是在对应地址上进行字符复制,没有更改数组的首地址。。所以应该不存在更改常量的问题。 C.s3是一个字符指针变量,没有赋初值。其初值不可预料,可能指向内存的各个地方;万一s3原先指向的是内存关键区域,将"string1"复制进去后就会有严重问题。。 D.s2没有初值,不同系统可能有不同情况,可能没问题可能也有问题,有问题的时候就如同A项一样。 记得书上有讲过,调用strcpy时,字符数组1的长度不应小于字符串2的长度。 所以我认为ACD均在用法上有误。 B是可以的,"string1"加上字符串尾巴的'\0'实际上有8个字符,复制到s2中刚刚好。

附上strcpy的源码,百科上找到的。 原型:extern char *strcpy(char *dest,char *src); 用法:#include char *strcpy(char *strDest, const char *strSrc); { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0' ) NULL ; return address ; } 以上就可以知道,strcpy不是将两个字符串的首地址进行调换。只是“搬东西”而已吧。。相比之下。C的问题最严重吧。 我错了。。 在A项的解释中。"string2"复制给s1时,'2'是覆盖原先s1+6中'\0'的位置,是"string2"最后的'\0'是复制到s1+7对应的地址上,这个跑到外面去了。。

C语言中strcpy函数的第一个参数不能是字符指针吗

strcpy(string1,string2);

是把第二个字符串写到第一个字符串的地址上,从而代替第一个字符串,实现字符串复制的作用。

这就要求第一个字符串string1是能够改写的!

我们看一看你定义的第一个字符串char *p="1234567";,这个语句首先建立一个字符指针p,再在常量区建立一个字符串“1234567”(注意常量区的数据是不能改写的),然后把首字符'1'的地址赋值给p。

这样建立的字符串p(它只能存放一个地址),只能把所谓的p字符串读出来,而不能往里写字符或修改,因为它的字符们都在常量区呢。

所以,系统无法写入p地址的内存中,造成复制不成功。

因此,strcpy()函数的第一个参数不能使用字符指针。类似的情况还有strcat函数。

以下为关联文档:

C语言关于strlen函数的问题这里遇到字符串结束符不是偶然的。对于数组,C语言规定,若没有初始化列表,则仅分配空间,对应内存区域为随机值(实际情况视编译器而定,例如Microsoft C编译器Debug模式下会用0xcc填...

关于c语言和c库函数的理解每种c编译器都有自己特定的库函数吗? ——现在没多少啦,因为标准规定的至少要实现的库函数已经足够多了。但编译器支持链接第三方的一些库,所以你可以不断地增加库函数,甚至写自...

c语言:数组:不用strcpy函数实现字符串的复制#include<stdio.h> void Copy_string(char* str1, char* str2); //函数声明 int main() { char str1[20]; char str2[20]; puts("请输入字符串str1:"); gets(str1); //获取从键盘...

关于C语言随机函数把 srand( time(0) ); 放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了? 因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要...

关于c语言中数组作为函数参数的函数之间调用问题1、新建一个数组作为参数项目,如图所示: 2、添加一个array.c文件,如图所示: 3、包含stdio.h和stdlib.h头文件,如图所示: 4、输入main函数主体及返回值,如图所示: 5、定义一个数...

编C语言程序用自定义函数实现字符串处理函数strcat strcpy/*** *char *strcat(dst, src) - concatenate (append) one string to another * *Purpose: * Concatenates src onto the end of dest. Assumes enough * space in dest. *...

用C语言程序通过自定义函数实现字符串处理函数strcat strcpy0.0+【我自己做的 【strlen { char ch1[10]="abc"; int i; for(i=0;ch1[i]!='\0';i++);//循环到不是\0为假(结尾) printf("len=%d",i);//循环次数就是字符串的长度 getch(); } 【str...

编C语言程序:用自定义函数实现字符串处理函数strcat strcpy/*** *char *strcat(dst, src) - concatenate (append) one string to another * *Purpose: * Concatenates src onto the end of dest. Assumes enough * space in dest. *...

c语言关于递归函数的问题递归的本质是栈。栈是一种数据结构,后进先出。 简单说就是,palin(5)再调用palin(4)之前会设置断点,先将palin(5)中的next中的值保存起来。保存完后,再调用palin(4),同理palin(3)...

推荐阅读
图文推荐