C语言字符数组如何初始化?

Posted

tags:

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

C语言允许用字符串的方式对数组作初始化赋值。例如:

static char c[]='c',' ','p','r','o','g','r','a','m'; 可写为:

static char c[]="C program"; 或去掉写为:

static char c[]="C program";

当对全体元素赋初值时也可以省去长度说明。例如:static char c[]=`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`;这时C数组的长度自动定为9。

扩展资料:

数组的使用规则:

1.可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]=0,1,2,3,4;表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]=1,1,1,1,1,1,1,1,1,1;而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]=1,2,3,4,5;可写为:static int a[]=1,2,3,4,5;动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

参考资料:

百度百科-数组

参考技术A

1、直接逐个初始化字符数组:


字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

char str[10]= 'I',' ','a','m',' ',‘h’,'a','p','p','y';


注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\\0' )。


2、用字符串常量来初始化字符数组:

   在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组。

char str[]="I am happy";

也可以省略花括号。

char str[]="I am happy";

 但是,上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的。

char str[];
str="I am happy";//错误,字符数组的赋值只能按元素一一赋值

参考技术B 般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它。比如说:Code:char testcase[30][MAX_LENGTH] = jo,vicent,tom,honey,gigi,lily,susan,peter,bob,ron,jason,henry,kiki,ken,auscar,vivian,yiyi,peace,iron,lotusandy,arta,ophone,denial,pipe,wade,james,kobe,kent,angel;通常使用二维字符数组是为了在程序中存储一些字符串关键字。用这样的方式来初始化就最简单不过了。其中,MAX_LENGTH是所有字符串中最大的长度。当然不能忘记'\0'了。而定义一个字符二维数组,C也提供了简洁的方式,如果我不想统计字符串的长度,我还可以这样定义:Code:char *testcase[30] = jo,vicent,tom,honey,gigi,lily,susan,peter,bob,ron,jason,henry,kiki,ken,auscar,vivian,yiyi,peace,iron,lotusandy,arta,ophone,denial,pipe,wade,james,kobe,kent,angel;也就是说,可以不再数组定义的时候指定字符串的长度,但是注意字符串的个数是一定要指定的,像这样写 char **testcase = ... 是不行的,不过肯定不行了,因为int *pt=3 也不行,呵呵,这两个例子是一个道理啊。我觉得肯定是人都喜欢第二种初始化方法了,而且它还有一个优点,起码对喜欢用指针的同志来说是一个大优点。就是可以将这样定义的指针赋给一个二维指针,比如char **pointer = testcase;想形式1的定义方法肯定不能这样赋值了。不过非常非常值得注意的是,上面定义的两个指针,一个一维,一个二维,他们必须在const关键字上一致,意思就是说如果定义testcase前面加了const关键字,定义pointer时也必须加上,否则就会报错:本回答被提问者采纳 参考技术C

初始化char数组:

char str[10]="Hello";
char str[10]='H','e','l','l','o','\\0';
char str[10]='H';
char str[10]=0;
 
char str[10]="Hello, world.\\n";
 
char str[]="Hello, world.\\n";

第一种情况:初始化数据小于数组长度
如前面两个初始化的例子,这两个例子的效果一样,前五个字符为Hello,剩余的用'\\0'填充
第三行与第四行,都只指定了第一个字符,剩余的全部用'\\0'填充。第四个例子相当将整个数组初始化为'\\0'

第二种情况:初始化数据等于或超过数据长度
这种情况下,超出的部分将被丢弃,所以最五个例子的最后一个字符为'r'.
此时使用一些字符串函数时要特别注意,因为该数组不含有'\\0',会造成不可预期的结果

第三种情况:不指定数组长度
这种情况下,数组部分如果不含有明确指定的'\\0',那么编译时会被自动添加一个'\\0';
在数组不含有明确的'\\0'时,sizeof=strlen+1

C语言中如何把int型数组转化为字符串?

如何把int型数组转化为字符串?请给出一个函数方法

方法1:

int a[10]=1,2,3,4,5,6,7,8,9,0;
 char buf[10];
 string s;
 for(int i=0;i<10;i++)
 
  itoa(a[i],buf,10);
  s+=buf;
 

方法2:

int a[10]=65,66,67,68,69,70,71,72,73,74;
 char buf;
 string s;
 for(int i=0;i<10;i++)
 
  buf=a[i];
  s+=buf;
 

方法3:

int a[10]=0,1,2,3,4,5,6,7,8,9;
 char buf;
 string s;
 for(int i=0;i<10;i++)
 
  buf=(char)a[i]+48;
  s+=buf;
 

参考技术A 不准用sprintf 之类函数,要自己写,那么 这样自己写i2s如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void i2s(int x, char *s)
int v,xx,i,j,n=0;
char c;
xx = abs(x);
while(1)
v=xx%10;
s[n]=v+'0'; n++;
xx=(xx-v)/10;
if (xx==0) break;

if (x<0) s[n]='-'; n++;
for (i=0;i<n/2;i++)
c=s[i]; s[i]=s[n-i-1];s[n-i-1]=c;

s[n]='\0';


main()

int a[4]=12,34,-56,789;
char s[4][15];
int i;
for (i=0;i<4;i++)
i2s(a[i],s[i]);
printf("%s ",s[i]);

return 0;


输出:12 34 -56 789
如用
int i2s(int x, char *s)
//全部照旧
return n;

可以返回字符串长度。
你若想把所有输出放入一个长长的char 数组,有了每个字符串长度,应当很容易自己做了--即使不用strcat()。
参考技术B 是以整型的位数为限的,输入位数太长了不行。
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"//
void main(void)
double rn=9876.5678;
int i=1000000000,k,pt=1,n;
char a[12]="";
printf("Enter a floating point number...\nrn=");
//scanf("%lf",&rn); //手工输入时把这一行开放.
while((rn/=10)>1.0) pt++;
n=(int)(rn*i);
while(!(n%10))
n/=10;
i/=10;

for(k=0,i/=10;i>=1;i/=10)
a[k++]=n/i+'0';
n%=i;
if(k==pt) a[k++]='.';

printf("%s\n",a);
参考技术C int b=13444;
sprintf(a,"%d" ,b)将b的值转换为“13444”字符串付给a。追问

不用 sprintf itoa

参考技术D char s[10];
sprintf(s,"%d",10);
----------------------------------or--------------------------
#include <stdlib.h>
#include <stdio.h>
int main()

int number = 123456;
char string[25];
itoa(number, string, 10);
printf("integer = %d string = %s\n", number, string);
return 0;
追问

不用 sprintf itoa

追答

那就考虑内存里面直接操作ASCII码,每位直接读了加0x30

追问

就是这样,可以写成可以调用的函数形式吗,int中包括符号的

以上是关于C语言字符数组如何初始化?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何将二维字符数组作为函数参数引用传递

c语言字符数组如何比较?

C语言中如何把int型数组转化为字符串?

C语言,整数数组转化为字符串

c语言 如何将已赋值的字符串初始化为空?

c语言切割字符串存入数组?