c语言中char类型数组的输出问题--输出时为何需要&符?

Python010

c语言中char类型数组的输出问题--输出时为何需要&符?,第1张

在C语言中数组的名字即数组的起始地址,也是数组第一个元素的地址。因此,假设有一个char类型的数组a表示成如下代码:

char a[20]

那么a表示字符数组的起始地址,它和&a[0]是一个意思。

使用printf()输出字符数组a的内容:

printf("%s\n", a)

就等同于printf("%s\n", &a[0])

输出的时候用:

int i = 0

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

printf("a[%d]=%c\n", i, a[i])

}

防止缓冲区溢出可以用这样的:

fgets(a, sizeof(a), stdin)

a[strlen(a) - 1] = '\0'

扩展资料:

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

参考资料来源:百度百科-字符数组

试一试这种方式:

    char name[10][100] = {}

    int ictr

    for(ictr = 1 ictr<=10 ictr++)

    {

        printf("\nNumber %d name is:", ictr)

        scanf("%s", name[ictr - 1])

    }

    printf("Names:")

    for(ictr = 0 ictr < 10 ictr++)

    {

        printf("%s\n", name[ictr])

    }

%x是将一个整数按照16进制数字打印。而a是一个字符数组的首地址,如果按照%x来打印的话,那就是打印a所在的地址,并不是打印他的内容,所以%010x是没有办法打印出楼主需要的结果的。

楼主想打印的是的数组里面的内容的话,那就只能遍历打印里面的内容了。

char* format="%08x-%02x%02x%02x%02x%02x"

memset(b,0,100)

sprintf(b,format,d,a[0],a[1],a[2],a[3],a[4])这个样子就可以了,将数组里面的内容按照16进制打印,每一个占用2个字符就ok啦。