【发布时间】:2017-03-18 09:34:13
【问题描述】:
我对 C 很陌生。我编写了一些代码来尝试用逗号分隔标准输入字符串,但我不确定如何最好地做到这一点。
基本上,我有一些数据将由用户按以下格式输入:
UserID (char[]), 00:00:00 (for time,(char[]), MeasurementID (char[ ]), readingValue(双精度)
我需要将这些值分开,以便将它们分别分配给一个变量。我写了一些代码,我尝试这样做,但是,我知道它不太正确。
char buffer [1024];
char input[];
scanf("%s", input);
int temp = 0;
int timekeeper = 0;
char userID[];
char timestamp[];
char measurementID[];
double value;
for(temp = 0; temp < sizeof(input); temp++){
char val[1024];
while(input[temp] != ','){
val += input[temp];
}
if(timekeeper == 0){
userID = val;
}
else if(timekeeper == 1){
timestamp = val;
}
else if(timekeeper == 2){
measurementID = val;
}
else if(timekeeper == 3){
value = (double)val;
}
timekeeper++;
}
这些是我遇到的错误,如果它们有帮助的话。
exp.c:87:7: 错误:二进制 + 的操作数无效(有 'char[1024]' 和 ‘int’)
exp.c:90:6: 错误:分配给类型时类型不兼容 来自‘char *’类型的‘char[1024]’
exp.c:93:13: 错误:不兼容的类型 从“char *”类型分配给“char [1024]”类型时
exp.c:96:8: 错误:分配给类型“char [1024]”时的类型不兼容 输入‘char *’
exp.c:99:3: 错误:指针值在浮动的地方使用 预期点值
【问题讨论】:
-
永远不要使用
scanf("%s", input);,而是使用fgets。 -
这里缺少
char input[];数组大小。 -
不能在 C 中使用 + 扩展字符串。
-
关于这一行:
scanf("%s", input);1) 始终检查返回值(不是参数值)以确保操作成功。 2) 使用%s输入/转换说明符时,始终包含一个 MAX CHARACTERS 修饰符,这样用户就不会超出输入缓冲区。这种溢出是未定义的行为,并且可能/将导致段错误事件。注意:scanf()将在第一次出现white space char (for instance a space), so the whole line would not be input. Suggest usingfgets()` 或getline()时停止输入字符 -
这种语句:
char userID[];将定义一个指向 char 的指针,该指针没有被初始化为指向任何特定的东西。 IE。将该声明更改为char userID[ 20 ];