使用单个字符

时间:2017-03-11 05:42:18

标签: c arrays string

在C中声明一个数组时,我可以写int array[100]={0},并为所有索引分配0。有没有办法用字符串做同样的事情?因为当我写char string[100]={'A'}时,它只将'A'分配给第一个索引。当我打印字符串时,它显示“A”而不是我想要的“AAAAA ..... A(99次)”。我不想使用循环来为所有索引分配'A'。那我该怎么办?

3 个答案:

答案 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;
}