试图将stdin char []拆分为','

时间:2017-03-18 09:34:14

标签: c split stdin

我是C的新手。我编写了一些代码来尝试用逗号分隔stdin字符串,但我不知道如何最好地做到这一点。

基本上,我有一些数据将由用户以下列格式输入:

  

UserID (char []), 00:00:00 (时间,(char []), MeasurementID (char [ ]), readingValue (double)

我需要将这些值分开,以便我可以将它们分配给变量。我写了一些代码,我已经尝试来执行此操作,但是,我知道它不太正确。

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:错误:浮点数所用的指针值   点值是预期的

2 个答案:

答案 0 :(得分:2)

似乎你误解了字符串在C语言中是如何工作的。

做类似

的事情
val += input[temp];

无效的C代码。您不会将字符添加到C字符串中。存在用于操纵字符串的特殊功能,例如, strncatstrncpy等。

还有像

这样的定义
char userID[];

无效,因为没有数组大小。

请注意

sizeof(input);

会给你变量的大小,但你可能想要字符串的长度,即改用strlen(input)

此外,您无法通过

将字符串转换为双精度数
value = (double)val;

而是查找atof函数。

这部分

while(input[temp] != ','){
    val += input[temp];
}

会给你一个无限循环,temp(因而input[temp])不会改变。

我建议您查看此答案Split string with delimiters in C,了解如何将字符串拆分为多个字符串。

答案 1 :(得分:0)

你不能连接char *和char [](“|”)或使用+的任何排列。请改用strncat()或snprintf(),并确保目标缓冲区有足够的内存来存储最终的字符串。