[英]Trouble converting string from commandline to array of floats
char * temp_array;
strcpy(temp_array, argv[i + 1]);
for(int j = 0; j < 8; j++)
{
fann_input[j] = atoi(temp_array[j]);
printf("%f\n", fann_input[j]);
printf("o%c\n", temp_array[j]);
}
fann_input是一个浮点数组。
在atoi行上,出现错误:
src/main.cpp: In function ‘int main(int, const char**)’:
src/main.cpp:117: error: invalid conversion from ‘char’ to ‘const char*’
src/main.cpp:117: error: initializing argument 1 of ‘int atoi(const char*)’
有任何想法吗?
每个字符都是1或0
这里的各种坏:
您正在尝试将字符串复制到未初始化的char*
(已声明temp_array
但从未初始化)
atoi
需要一个指向整个字符串的指针,但是您要向其传递单个字符( temp_array[j]
)
fann_input
是一个float
数组(您说),但是您尝试用int
填充它(这是atoi
返回的)
您正在C ++中使用C构造(指针, atoi
等)
您一遍又一遍地重复使用相同的命令行参数。
按照这些思路做更多的事情。 未编译的伪代码如下。 错误处理留给您练习。
for( int j = 0; j < 8; ++j )
{
stringstream ss;
ss << argv[j+1]; // copy cmd line param to stream
float val = 0.0f;
ss >> val; // convert to a float
fann_input[j] = val; // save it!
}
temp_array[i]
正是编译器告诉你它是-个char
。 atoi()
将字符串作为唯一参数。 您需要更正算法,才能将字符串传递给atoi()
。
main
的原型是int main(int argc, char **argv)
,即使argv
应该被视为常量。 temp_array
未初始化。 atoi
。 atoi
转换为int
,而不是float
,尽管{0,1}输入应该不是问题。 要将字符串s
的单个数字转换为float
,请执行
float x = s[i] - '0';
(假设1后面跟随0的ASCII或EBCDIC兼容字符集。我从未听说过不正确的字符集。)
您可以发布完整的代码吗?
您在循环外使用“ i”,然后在for循环中重新定义它,然后看起来您正试图将字符串的每个CHARACTER转换为其自己的float?
对于您来说,实际上并没有在temp_array中分配任何空间。 那会给你一个很好的运行时错误。
以下代码行是错误的,并给您带来错误:
fann_input[i] = atoi(temp_array[i]
您需要将1个字符传递给atoi时需要一个字符串。
也
strcpy(temp_array, argv[i + 1]);
在声明之前使用i。
您还没有分配任何空间temp_array
所以,当你要写信给随机位置strcpy
进去。 当将temp_array
为字符数组时,您temp_array
视为字符串数组,然后尝试将单个字符转换为浮点数。 atoi
将转换为int
不是float
或double
。 您需要使用atof
。
像这样的C ++风格的方法呢,甚至更好的方法是使用流:
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
typedef std::vector<std::string> Args;
Args args(&argv[1], &argv[argc]);
std::vector<double> results;
for(Args::const_iterator i = args.begin(); i != args.end(); ++i)
{
results.push_back(atof(i->c_str()));
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.