我正在为我的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;
当我执行我的代码时,我得到了一个段错误,有人可以向我解释我做错了什么,以及在我初始化这个变量时内存中发生了什么的差异?
答案 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)
但是,如果您编辑代码并删除*
即可获得答案,但正常数组已被弃用,现在,程序员使用vector
,normal 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;