如何用memcpy()将指针内数据复制到float数组?解决类型不兼容报错
问题解决:参数类型“float”与“void*”不兼容的错误处理
错误原因分析
你写的memcpy(Fquantity[ctr], amount, 5)存在两个核心问题:
- 类型不匹配:
memcpy的第一个参数要求是void*(指针类型),但Fquantity[ctr]是float类型的变量,不是指针,这直接触发了编译器的类型不兼容报错。 - 逻辑错误:就算强制转换指针类型,
amount是字符串形式的数字(比如"15.2"),直接用memcpy复制内存到float变量里也得不到正确数值——字符串是ASCII字符序列,和float的二进制存储格式完全不同,复制后只会得到乱码值。
正确解决方案
不需要用memcpy,直接把字符串转换成float类型后赋值给数组元素即可,修改关键代码如下:
amount = strtok_s(NULL, d, &next); printf("amount: %.1f\n", atof(amount)); // 替换原来的memcpy行,直接赋值转换后的float值 Fquantity[ctr] = atof(amount); hos = strtok_s(NULL, d, &next); printf("hospital: %s\n", hos);
可选优化:增加错误检查
如果要处理amount不是合法数字的情况(比如空字符串、非数字字符),可以用strtof代替atof,它能提供错误检测:
amount = strtok_s(NULL, d, &next); char *endptr; float val = strtof(amount, &endptr); if (endptr == amount) { // 转换失败,处理错误逻辑 printf("无效的数值:%s\n", amount); val = 0.0f; } Fquantity[ctr] = val; printf("amount: %.1f\n", val);
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

