1

我正在为我的 C 课程做作业,我正在尝试接收用户的输入并将其存储在一个变量中以供以后在我的代码中使用。这是我的主要功能的样子,

int main() {
    // Variables here
    char* inputLine[10];

    do {
        printf("Insert number....");
        scanf("%s\n", inputLine);
        // More stuff here
    }
    return 0;
}

这段代码给了我一堆警告,warning: format specifies type 'char *' but the argument has type 'char **' [-Wformat]如果我将变量声明更改为,

char* inputLine = NULL;

当我执行我的代码时出现段错误,有人可以向我解释我做错了什么,以及初始化这个变量时内存中发生的差异吗?

4

3 回答 3

5

char* inputLine[10];

--> 是一个由十个指针组成的数组char

printf 的格式%s需要 type 的参数char *,但您将其作为 type 提供char **

只需使用

char inputLine[10];

为避免可能的缓冲区溢出,您应该使用

scanf("%9s", inputLine); //Notice the size with %s

9只是因为 C 字符串是空终止的 ( '\0') 所以它的一个额外字节在末尾

于 2013-10-07T17:15:16.120 回答
3
 char inputLine[10];

 do {
    printf("Insert number....");
    scanf("%9s\n", inputLine);
    // More stuff here
} while( //some condition);
于 2013-10-07T17:16:26.900 回答
0

但是,如果您编辑代码并删除*您会得到答案,但不推荐使用普通数组,如今,程序员使用vector, normal array in C not safe

#include <iostream>
#include <vector>
using namespace std;
int main() {

    vector<string> inputLine;

您可以使用 every 定义data type

vector<int> myvar;

或者您可以定义多维vector

vector< vector <int> > myvar;
于 2013-10-07T17:39:49.527 回答