在C中声明一个数组时,我可以写int array[100]={0}
,并为所有索引分配0。有没有办法用字符串做同样的事情?因为当我写char string[100]={'A'}
时,它只将'A'分配给第一个索引。当我打印字符串时,它显示“A”而不是我想要的“AAAAA ..... A(99次)”。我不想使用循环来为所有索引分配'A'。那我该怎么办?
答案 0 :(得分:2)
标准C没有您想要的机制。特别要注意的是,您描述的两种情况是相同的:int array[100]={0}
导致数组初始化为全零而不是因为指定的0应用于所有元素,而是指定的0应用于零 th 元素,所有其他未初始化的元素都使用默认值初始化,巧合指定为0. char
数组的初始化遵循同样的规则。
如果要将数组的99个元素初始化为“A”,则初始值设定项必须提供99'A'。如果你想避免输入(并计算)它们全部,那么你可以使用宏来协助:
#define REPEAT11(x) x x x x x x x x x x x
char string[100] = REPEAT11("AAAAAAAAA");
使用相邻字符串文字的编译时连接来形成所需的初始值设定项。
答案 1 :(得分:2)
您还可以使用<string.h>
中的memset()
以'A'
个字符填充数组的前n个字节。这是一个例子:
#include <stdio.h>
#include <string.h>
#define SIZE 100
int main(void) {
/* initializes all elements to 0. */
/* Will not work with 'A' as the default values of this array are 0 */
char array[SIZE] = {0};
/* fills first 99 bytes with 'A', and leaves last byte as '\0' */
memset(array, 'A', sizeof(array)-1);
printf("array = %s\n", array);
printf("length of array = %zu\n", strlen(array));
/* Outputs:
array = AAAAAAAAA...
length of array = 99
*/
return 0;
}
答案 2 :(得分:2)
它不在标准中,但是我在系统上测试过的一些编译器(包括gcc和clang)允许这样做:
#include <stdio.h>
int main(){
char str[100] = {[0 ... 98] = 'A'};
str[99]='\0'; // this line is really not necessary, since default is 0 and I just wrote it for clarity
printf("%s\n", str);
return 0;
}