将一个字符数组拷贝给一个指针:
#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`是一个非常基础且重要的字符串处理函数,它用于复制一个字符串到另一个字符串中。本文将深入探讨`strcpy`的使用方法、原理以及相关的注意事项。 `strcpy`函数是C标准库`string.h`中的一部分,其...
1. 字符串初始化与复制:了解如何初始化字符串,以及如何使用strcpy()函数进行字符串复制,避免缓冲区溢出的问题。 2. 字符串比较:熟悉strcmp()函数的用法,用于比较两个字符串是否相等或按字典顺序排列。 3. ...
C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c
### 字符串拷贝知识点详解 #### 一、概述 在C语言中,字符串是由字符组成的数组,并且最后一个字符必须是空字符`'\0'`。字符串操作是编程中的常见需求,例如拷贝一个字符串到另一个字符串。本篇文章将详细探讨如何...
根据给定的信息,我们需要实现一个C语言函数`void fun(char *s,char *t,char *p)`,该函数的功能是:将未在字符串`s`中出现、而在字符串`t`中出现的字符形成一个新的字符串并存储在指针`p`指向的空间内。新字符串中...
在计算机科学中,字符串操作是非常常见的任务之一。其中,字符串的循环移动是一种特殊的字符串操作方式,它涉及到将字符串中的字符按照特定的方式重新排列。本篇文章的目标是实现一个函数,该函数可以将一个给定的...
4. **字符串的常用函数**:C语言中的`<string.h>`库提供了许多字符串处理函数,如`strlen()`计算字符串长度,`strcpy()`和`strncpy()`复制字符串,`strcmp()`比较字符串,`strtok()`分割字符串等。 在`线性表上机....
19. strcpy:将一个字符串复制到另一个字符串,不包括结束的空字符。 20. strcspn:返回字符串中连续不含指定子字符串的字符数。 21. strdup:动态分配内存并复制一个字符串,返回一个新字符串。 22. strfry:将...
1. **strcpy()**:这个函数用于拷贝一个字符串到另一个字符串。在示例中,`pszValue` 的值被复制到 `a` 中。`strcpy()` 需要谨慎使用,因为它不检查目标字符串的长度,可能导致缓冲区溢出。为了安全起见,通常推荐...
C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`<string.h>`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了更好地理解和掌握C语言,有时我们需要自己动手...
strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(\0)时,它会删去该字符,并结束拷贝。 memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以您要为...
`strcpy()`函数用于复制字符串,我们可以利用这一特性,先创建一个临时字符串,将原字符串的后部分复制到临时字符串的开头,再将原字符串的前部分复制到原字符串的末尾,最后将临时字符串复制回原字符串的开头。...
strcpy函数则实现将源字符串复制到目标字符串的指定内存位置,并返回目标字符串的指针。strncat和strncpy是strcat和strcpy的变体,它们仅复制源字符串的前n个字符。strncmp与strcmp相似,但只比较前n个字符。...
通过`strcpy`函数将字符串复制到`s1`中,接着将`s2`的地址赋给了另一个指针`p2`。之后使用一个`for`循环,将`s1`中的内容逐个字符地复制到`s2`中,直至遇到字符串的结束符`'\0'`。 #### 三、具体操作分析 1. **...
这里需要使用字符串函数,如`strcpy`、`strcat`等。下面是一个例子: ```c char arr[20]; scanf("%s", arr); // 从用户输入读取字符串 // 或者 fscanf(stdin, "%s", arr); // 从标准输入流读取字符串 // 现在arr是...
strcpy 函数也是字符串拷贝函数之一,它可以将源字符串拷贝到目的字符串中。该函数的原型为: `char* strcpy(char* str1,char* str2)` 函数功能:把 str2 指向的字符串拷贝到 str1 中去。 函数返回:返回 str1,...
复制字符串可以使用strcpy函数,该函数的实现方法如下: ```c char *strcpy(char *s,char *s1){ int i; for(i=0;i;i++) *(s+i)=*(s1+i); return s; } ``` 这个函数使用了指针操作,将源字符串的内容复制到目标...