Scanf Seg故障

时间:2013-10-07 17:13:43

标签: c io

我正在为我的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;

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

3 个答案:

答案 0 :(得分:5)

char* inputLine[10];

- >是一个包含指向char

的十个指针的数组

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

只需使用

char inputLine[10];

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

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

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

答案 1 :(得分:3)

 char inputLine[10];

 do {
    printf("Insert number....");
    scanf("%9s\n", inputLine);
    // More stuff here
} while( //some condition);

答案 2 :(得分:0)

但是,如果您编辑代码并删除*即可获得答案,但正常数组已被弃用,现在,程序员使用vectornormal array in C not safe

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

    vector<string> inputLine;

您可以定义每个data type

vector<int> myvar;

或者您可以定义多维vector

vector< vector <int> > myvar;