【问题标题】:Save mutliple strings of variable length in a single array in C在C中的单个数组中保存多个可变长度的字符串
【发布时间】:2022-11-05 21:53:08
【问题描述】:

我正在尝试制作一个 QnA 游戏,该游戏将从 10 个问题池中随机抽取 5 个问题并打印出来让用户回答。我有一个二维数组来保存 10 个字符串,这将是问题。到目前为止我的工作:

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

void qna(){
    int i;
    
    char er[10][13]; //10 questions
    
    er[0][]="2+2"; //ans 4
    er[1][]="4-5"; //ans -1
    er[2][]="10*10"; //ans 100
    er[3][]="17*3"; //ans 51
    er[4][]="9/3"; //ans 3
    er[5][]="45+24+35-68"; //ans 36
    er[6][]="4-2"; //ans 2
    er[7][]="592-591"; //ans 1
    er[8][]="8+3"; //ans 11
    er[9][]="9*9"; //answer 81
    
    for(i = 0; i < 10; i++){ //test to see if strings save correctly
        printf("%s\n", er[i]);
    }
    
}

int main() 
{
    qna();
    return 0;
    
}

当我编译程序时,对于将字符串分配给 er 的每一行,我都会收到一个错误“[Error] expected expression before ']' token”。然后我尝试了这个:

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

void qna(){
    int i;
    
    char er[10][13]; //10 questions
    
    er[0][13]="2+2"; //ans 4
    er[1][13]="4-5"; //ans -1
    er[2][13]="10*10"; //ans 100
    er[3][13]="17*3"; //ans 51
    er[4][13]="9/3"; //ans 3
    er[5][13]="45+24+35-68"; //ans 36
    er[6][13]="4-2"; //ans 2
    er[7][13]="592-591"; //ans 1
    er[8][13]="8+3"; //ans 11
    er[9][13]="9*9"; //answer 81
    
    for(i = 0; i < 10; i++){ //test to see if strings save correctly
        printf("%s\n", er[i]);
    }
    
}

int main() 
{
    qna();
    return 0;
    
}

当我运行它时,我收到一个警告“[Warning] assignment make integer from pointer without a cast”,而不是像以前一样在同一行上出现错误。命令行窗口打印奇怪的符号而不是字符串,并且有些行完全是空白的。我该如何解决?

【问题讨论】:

  • 回到你的教科书,在那里你学会了通过strcpy 复制字符串。
  • 当你分配一个字符串。您不复制它,而是将指针分配给存储在其他地方的字符串。在 "" 中声明一个字符串会使编译器将其存储在常量内存中。所以你不需要定义它们的大小。只需使用 10 个指向字符的指针数组。它们都将指向不同的位置。你永远不需要值 13

标签: arrays c string


【解决方案1】:

由于您似乎没有更改任何这些字符串的内容,因此您可以使用指向内存中(只读)字符串的指针数组。

char* er[] = {
    "2+2", //ans 4
    "4-5", //ans -1
    "10*10", //ans 100
    "17*3", //ans 51
    "9/3", //ans 3
    "45+24+35-68", //ans 36
    "4-2", //ans 2
    "592-591", //ans 1
    "8+3", //ans 11
    "9*9" //answer 81
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多