数组声明有问题

时间:2017-11-26 12:01:18

标签: c declaration strlen

我的代码有点问题。 我正在编写一个C项目,我需要声明一个与另一个完全相同大小的字符字段,问题是我的初始字符串(秘密)长于7个字符,它声明为14个字符。 这是一行:

char guessedWord[strlen(secret)];

更新,即使我声明为:

char guessedWord[10];

秘密长于7,它宣称为14,WTF?我认为这应该是不可能的......(使用strlen来获得长度)

功能如下:

    void hangman(const char secret[]) //Samotna hra
{
    int guesses=8; //zostavajuce pokusy
    int iteration=0; //iteracia
    char *lettersLeft="abcdefghijklmnopqrstuvwxyz"; //zostavajuce pismena
    char letters_guessed[ALPHABET_LENGHT]; //uz hadane pismena
    char input[100]; //vstupny znak
    char guessedWord[8]; //Zobrazene slovo

    for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova
    {
        guessedWord[i]='_';
    }
    for (int i=0; i < ALPHABET_LENGHT; i++) //inicializacia zoznamu hadanych pismen
    {
        letters_guessed[i]='_';
    }

    printf("Guessed word init %s strlen of secret is %ld, secret is %s and strlen of guessedWord is %ld\n", guessedWord, strlen(secret), secret, strlen(guessedWord));

1 个答案:

答案 0 :(得分:1)

char guessedWord[8]; //Zobrazene slovo

for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova
{
    guessedWord[i]='_';
}

strlen不会询问编译器是否知道文字/数组的大小(就像在sizeof某些情况下你可以做的那样,但它有其限制)。它只是查找终止零,因此它可以用于任何字符串(字符上的指针)。

因此,不是nul-terminating你的字符串可以使strlenguessedWord(未定义的行为)的范围之外寻找零

你需要分配适当数量的字符和数字。空终止:

int len = strlen(secret)
char guessedWord[len+1]; //Zobrazene slovo
int i;
for (i=0; i < len; i++) //inicializacia hadaneho slova
{
    guessedWord[i]='_';
}
guessedWord[i] = '\0'; // i == len here