2017-03-11 96 views
2

当声明C中的阵列I可以写int array[100]={0}并将其分配0到所有索引。有什么办法可以用字符串做同样的事情吗?因为当我写char string[100]={'A'}当我打印显示“A”,而不是我想要的“AAAAA ..... A(99次),”该字符串仅指定“A”到第一index.And。我不想用循环来分配所有的索引'A'。那么我能做什么?声明一个整串具有单个字符内

+0

确定“*它分配0到所有索引*“?另外,如果你想打印字符串“AAAAA”,你需要'char string [7] = {'A','A','A','A','A','\ 0'}。 ;' –

+1

“我不想用循环来为所有索引指定'A'” - 这就是发生在引擎盖下的情况,C非常故意隐藏。 –

+0

是的,我已经尝试过用数组。它将所有的索引赋值为0.而你对你的字符串的描述是真的。但是当字符串的长度更大并且不容易声明时该怎么办。 – TotallyUselessCoder

回答

2

它不是在标准,但一些编译器(包括gcc和铛,我和测试它在我的系统上)允许这样的:

#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; 
} 
+0

它会在C99或gnu gcc 5.1之前工作??? ??? btw thnx。 – TotallyUselessCoder

+0

它是GNU扩展的一部分,该链接是gcc 4.1.2的文档。所以我找不到原因不使用gcc 4.x.试试看。 – Arash

+0

感谢您的努力...... – TotallyUselessCoder

2

标准C并没有你想要的东西的机制。特别要注意的是你所描述的两种情况是一样的:那int array[100]={0}导致与全零初始化数组是不是因为指定0被应用于所有元素,而是指定的0加到零元件,并且所有否则未初始化元件被初始化为默认值,这巧合被指定为所述char阵列的0初始化遵循相同的规则。

如果要初始化数组以“A”的99元,则初始化必须提供99“A的。如果你想避免打字(和计数)所有这些,那么你可以使用宏来帮助:

#define REPEAT11(x) x x x x x x x x x x x 
char string[100] = REPEAT11("AAAAAAAAA"); 

,它利用相邻字符串文字的编译时间串联,形成想要的初始化。

+0

感谢您清除我对数组的想法。 – TotallyUselessCoder

2

您还可以使用memset()<string.h>填充阵列的前n个字节与'A'个字符。这里有一个例子:

#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; 
} 
+0

感谢它的工作。:) – TotallyUselessCoder

相关问题