数组声明的问题
Trouble with an array declaration
我的代码有点问题。
我正在编写一个 C 项目,我需要声明一个与另一个完全相同大小的字符字段,问题是任何时候我的初始字符串(秘密)长于 7 个字符,它声明为 14 个字符。
这是行:
char guessedWord[strlen(secret)];
更新,即使我声明为:
char guessedWord[10];
secret 比 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));
char guessedWord[8]; //Zobrazene slovo
for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova
{
guessedWord[i]='_';
}
strlen
不会询问编译器以了解 literal/array 的大小(就像在某些情况下可以用 sizeof
做的那样,但它有其局限性)。它只是寻找终止零,因此它可以用于任何字符串(字符上的指针)。
因此,不以 null 终止字符串会使 strlen
在 guessedWord
范围外寻找零(未定义的行为)
您需要分配适当数量的字符和空终止符:
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] = '[=11=]'; // i == len here
我的代码有点问题。 我正在编写一个 C 项目,我需要声明一个与另一个完全相同大小的字符字段,问题是任何时候我的初始字符串(秘密)长于 7 个字符,它声明为 14 个字符。 这是行:
char guessedWord[strlen(secret)];
更新,即使我声明为:
char guessedWord[10];
secret 比 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));
char guessedWord[8]; //Zobrazene slovo
for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova
{
guessedWord[i]='_';
}
strlen
不会询问编译器以了解 literal/array 的大小(就像在某些情况下可以用 sizeof
做的那样,但它有其局限性)。它只是寻找终止零,因此它可以用于任何字符串(字符上的指针)。
因此,不以 null 终止字符串会使 strlen
在 guessedWord
范围外寻找零(未定义的行为)
您需要分配适当数量的字符和空终止符:
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] = '[=11=]'; // i == len here