2017-03-11 37 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

相關問題