字符数组(字符串),在c中具有任意数量的元素

iq3niunx  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(100)

我在c中给字符串数组赋值时遇到了问题。代码是一个刽子手游戏的一部分

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int main()
{
    srand(time(0));
    int random = rand() % 5;

    char *sWords[] = {"banana", "apple", "GOAT", "jordan", "zhiki"};
    printf("%s\n", sWords[random]);

    char *sTempWord = sWords[random];

    char *sTempArr;
    for (int i = 0; sTempWord[i] != '\0'; i++)
        sTempArr[i] = '_';

    for (int i = 0; strlen(sTempArr); i++)
        printf("%c ", sTempArr[i]);
}

没有错误,当我运行程序时,它就退出了。计划是从列表中获得随机单词,创建一个具有随机选择单词长度的临时数组,并将所有元素赋值为“_”。
另外,当我尝试使用常量值创建数组时,(如char sTempArr[len],其中len=strlen(sTempWord),它表示:表达式必须有常量值

eoxn13cs

eoxn13cs1#

当声明一个数组时,编译器需要在编译时知道长度(例如,值不能是变量)。
你可以创建一个初始的空数组,其中包含已知数量的元素(你需要确保它足够大,可以容纳sWords中的任何单词,包括空终止符):

char sTempArr[100];

或者,您可以在运行时使用malloc()这样的命令分配动态内存:

#include <stdlib.h>

int len = strlen(sTempWord) + 1;   // +1 for '\0'
char *sTempArr; = malloc(len);

// ...

free(sTempArr);    // When you are done using the array

它们不一样。

ovfsdjhp

ovfsdjhp2#

1.未初始化指针。

char *sTempArr;

1.不能以空字符终止字符串

for (int i = 0; sTempWord[i] != '\0'; i++)
        sTempArr[i] = '_';

1.由于字符串以空字符结尾,因此不能调用strlen
一个二个一个一个

相关问题