怎么把指针的字符串给数组

如题所述

第1个回答  2022-10-10
1. 如何把一个字符指针指向的字符串复制给字符数组
假如有char *p且p已指向一含有10个元素的字符数组,现有目标数组char b[10],则可以有三种函数可以实现字符串复制。

1、strcpy

语法格式: strcpy(目标地址,源地址)

此例语法:strcpy(b,p);

将源地址后的字符逐一复制到目标地址中,直到遇到结束符,如果源串中不含结束符就会造成目标数组越界。

2、strncpy

语法格式:strncpy(目标地址,源地址,字符长度)

此例语法:strncpy(b,p,10);

将源地址开始前n个(指定字符长度)字符逐一复制到目标地址中,不检测结束符也不检测边界,当指定长度大于目标数组长度则会越界。

3、memcpy

语法格式:memcpy(目标地址,源地址,字节长度)

此例语法:memcpy(b,p,sizeof(char)*10);

内存数据块复制,执行效率最高的一个。将源地址开始前n个(指定字符长度*字符的数据宽度)字节的内容复逐一复制到目标地址中,无视数组元素类型,只按字节复制,不检测数组边界,当指定长度大于目标数组长度则会越界。这里需要注意的是数组长度必须通过给定的元素类型获得数据宽度(sizeof(char))然后计算出实际的内存大小。
2. 怎么将指针指向的字符串赋值给数组
#include<stdio.h>

#include<string.h>

char *copystr(const char*s1,char p1[100])

{

int i=0;

while(s1[i]!='\0')

{

p1[i]=s1[i];

i++;

}

p1[i]='\0';

return p1;

}

int main()

{

const char *s="hello! what are you doing?";

char p[100];

char *q;

q=(char*)s;这句话直接把s的地址赋值给q

copystr(s,p);这个是函数一个一个赋值

puts(p);

puts(q);

return 0;

}
3. 如何把一个字符指针指向的字符串复制给字符数组
假如有char *p且p已指向一含有10个元素的字符数组,现有目标数组char b[10],则可以有三种函数可e799bee5baa6e58685e5aeb931333339666639以实现字符串复制。

1、strcpy语法格式: strcpy(目标地址,源地址)此例语法:strcpy(b,p);将源地址后的字符逐一复制到目标地址中,直到遇到结束符,如果源串中不含结束符就会造成目标数组越界。2、strncpy语法格式:strncpy(目标地址,源地址,字符长度)此例语法:strncpy(b,p,10);将源地址开始前n个(指定字符长度)字符逐一复制到目标地址中,不检测结束符也不检测边界,当指定长度大于目标数组长度则会越界。

3、memcpy语法格式:memcpy(目标地址,源地址,字节长度)此例语法:memcpy(b,p,sizeof(char)*10);内存数据块复制,执行效率最高的一个。将源地址开始前n个(指定字符长度*字符的数据宽度)字节的内容复逐一复制到目标地址中,无视数组元素类型,只按字节复制,不检测数组边界,当指定长度大于目标数组长度则会越界。

这里需要注意的是数组长度必须通过给定的元素类型获得数据宽度(sizeof(char))然后计算出实际的内存大小。
4. C语言中如果将一个指针所指向的字符串赋给数组
数组声明的时候就要指定大小的

可以用memcpy,对于字符串,也可以用strcpy或strncpy(需要包含string.h)

比如:

char *p="abc";

char a[10];

memcpy(a,p,sizeof(a));

或者

strcpy(a,p);

或者

strncpy(a,p,sizeof(a));/* 比上面的strcpy安全 */

PS:关于sizeof,取数组的时候是数组的大小,指针的话,32位机器,会是4,所以字符串指针不用sizeof取长度,用strlen();
5. 怎么将指针得到的数据传递给数组
主要是指针数组与数组指针的区别 定义 int (*p)[n];这个是数组指针 ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。

也就是说执行p+1时,p要跨过n个整型数据的长度 定义 int *p[n];这个是指针数组 []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]。

p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。