C语言怎样给字符数组赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎样给字符数组赋值相关的知识,希望对你有一定的参考价值。

例如
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()

char a[7]="ddgh";
printf("%s",a);


怎样才能不在定义时赋值,例如a="dsfsdf",这样不能实现。
有什么办法,只有这样吗?
a[1]='f';a[2]='f'.............
我不是指使用者输入,是编程员在编写的时候直接写入去。像这样a="dsfsdf",可惜这个不能实现

1、单字符赋值,可通过数组下标方式或指针方式,引用数组元素,进行赋值。

例子:

char a[10];

char ch='a';

for( i=0;i<10;i++ )

a[i]=ch+i ; //可通过数组下标引用数组元素,完成赋值

char *p;

for( p=a; p<a+10; p++ )

*p=ch++; //通过指针对数组相应元素赋

2、字符串赋值,可使用string.h头文件中的字符串操作函数进行赋值。

例子:

char a[10];

strcpy( a, "abcdefgh");

sprintf(a, "%s", "abcdefgh");

扩展资料:

C语言给字符数组赋值的优点:

1、简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

参考资料:百度百科 C语言基础语句

参考技术A

给字符数组赋值分两种情况,单字符赋值和字符串赋值。

单字符赋值,可通过数组下标方式或指针方式,引用数组元素,进行赋值,如:

char a[10];
char ch='a';
for( i=0;i<10;i++ )
     a[i]=ch+i ; //可通过数组下标引用数组元素,完成赋值
char *p;
for( p=a; p<a+10; p++ )
    *p=ch++; //通过指针对数组相应元素赋值

字符串赋值,可使用string.h头文件中的字符串操作函数进行赋值,如:

char a[10];
strcpy( a, "abcdefgh");
sprintf(a, "%s", "abcdefgh");

注意:数组在定义时,可以同时进行初始化,但定义完成后,就不能按初始化的形式对其赋值了,如:

char a[10]="abcdefgh"; //这样可以
a="abcdefgh"; //这样是错误的!a是数组名,是一个静态数据:数组首地址值,可以看作是个常数,不能再被改变。

参考技术B 你的意思我大概懂了!你是要实现不再定义时赋值,而是在定义后赋值吧!
这个好像不能在CZ中实现的,但是用字符指针可以实现相似的功能!具体操作如下:
#inlcude <stdio.h>
void main()

char *p;
p="ddgh";
printf("%s",p);

用指针,在赋值的时候是先把字符串的第一个首地址赋予给p,然后再跳往下一个地址p+1,再把第二个字符放进去。
后面的输出是先把首地址输出,然后地址自动加1,再输出,就输出量字符串

不知道这个是否可以代替楼主的那种想法?
参考技术C 其实你的第二种赋值方式是很危险的。容易产生问题。
因为字符串"china"实际上是六个字符。
在a的后面有一个字符串结尾标识符'\0'
不过这个是个警告。

回到正题。

当你使用
char x[5]="china";
进行初始化的时候,程序会自动将'c' 'h'' 'i' 'n' 'a' '\0'依次赋值到x中
x的实际存储情况与char x[5]='c','h','i','n','a';完全相同
而scanf的传入的参数是x。x是数组x[]的名称。同样也是x[]的首地址
在scanf进行操作同样是将china分解,依次赋值到x[]中

当进行字符串读取的时候,程序会连续读取字符,直到遇到'\0'为止
由于你的x[5]没有存储'\0'
所以有可能会产生错误
为什么是有可能呢?
因为内存初始化的时候,x[4]的后面,很可能就是0相当于‘\0’

所以你的程序会读取到这个'\0',认为字符串已经结束
误打误撞不报错。
参考技术D 设有定义char s[200];
以下均可给它赋值:
定义时赋值:
char s[200]="Good Moring!";
char s[200]='H','e','l','l','o';
运行时赋值:
1)
for(int i=0;i<26;i++)
s[i]='A'+i;
s[i]=0;
2)
for(int i=0;(s[i]=getchar())!='\n';i++);
s[--i]='\0';
3)
int i=0;
scanf("%c",&s[i]);
while(s[i]!='\n')
scanf("%c",&s[i++]);
s[--i]='\0';
3)
gets(s); //输入的一行不超过199字符
4)
strcpy(s,"Good Morning!"); //需包含头文件string.h

c语言怎么把二维数组的字符串给到一维数组?

#include <stdio.h>
int main()
char a[15]="你好";
char b[3][15]="323","223","123";
a=b[2];//这里怎么办
printf("%s",a);

按元素赋值:
遍历一维数组,并将每个元素赋值到二维数组的对应元素上。
或者遍历二维数组,将每个元素赋值为一维数组对应值上。
优点为操作灵活,可以按照需要任意赋值。
2 当一维数组和二维数组类型相同,而且赋值顺序与一维数组中的存储顺序完全相同时,可以用memcpy的方式,直接一次性赋值。
如一维数组为a,二维数组为b,基础类型为TYPE,需赋值元素个数为n,可以调用
memcpy(b,a,sizeof(TYPE)*n);
该方法有点为操作简单,执行效率高。
不过所需满足的前提条件多。在满足上述所有条件时,用memcpy的方式更为简单。

个就是apply的一个巧妙的用处,可以将一个数组默认的转换为一个参数列表([param1,param2,param3] 转换为 param1,param2,param3) 这个如果让我们用程序来实现将数组的每一个项,来装换为参数的列表。

参考技术A 字符串不能用赋值号(=)赋值。
有两种方法,一是用库函数strcpy(),二是一个一个字符赋值。第一种方法,前面已经有答友写了程序。下面说第二种方法。
不用库函数,可以这样写:
#include <stdio.h>
int main()
char a[15]="你好";
char b[3][15]="323","223","123";
int i;
for(i=0;a[i]=b[2][i];i++);
printf("%s\n",a);

也很简单。
有什么问题请留言。
参考技术B

使用内存复制函数

memcpy(a, b[2], strlen(b[2]) * sizeof(char) + 1);

格式:

memcpy ( 目标地址 , 源地址 ,内存字节长度);

其中

strlen(b[2]):计算b[2]行地址开始的字符串长度(不含结束符)

sizeof(char):跨编译器跨环境的写法,返回char类型的字节宽度。

两者相乘得到字符串占用内存长度(字节),最后补一个结束符的长度。


参考技术C

这个需要调用字符串复制函数strcpy,像这样:

#include <stdio.h>

#include <string.h>

int main()

char a[15]="你好";

char b[3][15]="323","223","123";

strcpy(a,b[2]);

printf("%s",a);

return 0;

截图:

以上是关于C语言怎样给字符数组赋值的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎么把字符数组中的字符赋值给字符变量

c语言中怎样实现对二维数组元素进行赋值并输出。

如何将String类的字符串 赋值给Char数组

如何将String类的字符串 赋值给Char数组

c语言字符串赋值给结构体内字符串数组的问题

怎样把一个char数组赋值给另一个char数组?