将一个字符数组拷贝给一个指针:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10]="123456";
char *str1 ="abcdefghij";
//copay a char array to a char point
strcpy(str1, string);
string[2]='z';
printf("string=%s\n", string);
printf("str1=%s\n",str1);
return 0;
}
string=12z456
str1=123456
或将一个字符指针所指向的值拷贝给字符数组。
注意字符串指针所指向的字符串长度必须小于目标字符数组,否则会内存污染!
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10]="123456";
char *str1 ="abcdefghij";
//copay a char point to a char array
strcpy(string,str1);
str1[2]='z';
printf("string=%s\n", string);
printf("str1=%s\n",str1);
return 0;
}
string=abcdefghij
str1=abzdefghij
但同样是将一个字符数组拷贝给一个字符指针的话:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[50]="12345678901234567890123456789012345678901234567890";
char *str1 ="ab";
strcpy(str1,string);
return 0;
}
程序是立刻崩溃的!
这就证明了一个经典经验:当定义字符指针为指向一个字符串常量时,如:
char *str1="ab";
就不能改变字符串常量的值,否着会污染内存。
引用
数组和指针都可以在它们的定义中用字符串常量进行初始化。尽管看上去一样,底层的机制却不想同。
定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化。例如,下面的定义创建了一个字符串常量(为其分配了内存):
char *p="breadfruit";
注意只有对字符串常量才是如此。不能指望为浮点数之类的常量分配空间,如:
float *pip=3.141; /*错误!无法通过编译*/
在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。
数组也可以用字符串常量进行初始化:
char a[]="gooseberry";
与指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变,比如下面的语句:
strncpy(a,"black",5);
就将数组的值修改为"blackberry"。
摘录自《C 专家编程》
结论:
strcpy(str1,str2) str1为字符串数组,或指向字符串数组的指针,字符串数组的长度硬大于str2。strcpy会将str2的值拷贝到str1中,执行类似str1[i]=str2[i]这样的运算。
分享到:
相关推荐
不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将...
C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。 例如: 当s为"12345", t为"8624677"时, p...
【字符串函数】strcpy的使用及原理
将字符串str1 拷贝到str2中
字符串单词提取 北大数算资源,需要的自己下载,我发福利啊
C语言学习-字符串处理函数 strcat(char str1,char str2) strcpy(char str1,char str2) strncpy(char str1,char str2,int n) strcmp(char str1,char str2)//比较两个字符串大小str1>str2返回值>0,str1=str2...
C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) ...
参考字符串函数,有strstr strcat strcpy strcmp等
输入一个字符串,把这个字符串按逆序重新存放 #include #include #define N 100 main() { char a[N],b[N]; int i,con; printf("input a[] ); gets(a); con=strlen(a); strcpy(b,a); for(i=0;i;i++) a[i]...
字符串处理函数及示例 如: 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *strcpy(char *destin, char *source); 程序例: C/C++ code #include #include int main(void) { char string[10]; char ...
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略...
用汇编写的字符串拷贝 求字符串大小 字符串比较,相当于用汇编实现了memcpy,strcpy,strcmp strlen等函数。用vc6.0编辑。
将一个字符串循环右移的三种方法, 第一种:逐个右移;第二种,调用strcpy()函数;第三种,调用memcpy()函数
1 将字符串转化为整数。2 将整数转化为字符串(考虑正负号的问题)。3 实现字符串拷贝函数strcpy(程序的完整性)。4 编程实现memcpy函数(以字节为单位的拷贝)。5 编程实现memmove函数。 等笔试题。
打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行文件;2. 输入“./test”运行...
该程序是我写的博客“一起talk C栗子吧(第六十回:C语言实例--字符串复制)”的配套程序,共享给大家使用
已知strcpy函数的原型是char *strcpy(char *strDest,const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。不调用C的字符串库函数,编写函数strcpy.
头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。函数实现: ...
实现strcpy,strcpy的功能的实现原理