我正在向C程序传递一个参数:
program_name 1234
int main (int argc, char *argv[]) {
int length_of_input = 0;
char* input = argv[1];
while(input[length_of_input]) {
//convert input from array of char to int
length_of_input++;
}
}
我希望能够将传递给函数的参数的每个数字分别用作整数。 atoi(input [])抛出编译时错误。
此代码无法编译:
while(input[length_of_input]) {
int temp = atoi(input[length_of_input]);
printf("char %i: %i\n", length_of_input, temp);
length_of_input++;
}
答案 0 :(得分:4)
int i;
for (i = 0; input[i] != 0; i++){
output[i] = input[i] - '0';
}
答案 1 :(得分:1)
看到这也是你的家庭作业
output[i] = input[i] - '0';
但请注意input[i]
实际上是一个数字(即它在'0'
和'9'
之间)!
答案 2 :(得分:1)
首先,您必须检查需要为整数数组分配多少空间。这可以使用strlen()
函数完成,也可以通过字符串迭代并检查找到多少个有效字符。然后,您必须遍历字符串并将每个(有效)字符转换为等效的整数。这里很难使用atoi()
或scanf()
系列函数,因为它们除了数组作为输入。更好的解决方案是编写自己的小转换器函数或片段进行转换。
这是一个小的示例应用程序,它将字符串转换为int数组。如果字符不是有效的十进制数字,则将-1
放入数组中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int length, i;
int *array;
char *input = argv[1];
/* check if there is input */
if(input == NULL) return EXIT_FAILURE;
/* check the length of the input */
length = strlen(input);
if(length < 1) return EXIT_FAILURE;
/* allocate space for the int array */
array = malloc(length * sizeof *array);
if(array == NULL) return EXIT_FAILURE;
/* convert string to integer array */
for(i = 0; i < length; ++i) {
if(input[i] >= '0' && input[i] <= '9')
array[i] = input[i] - '0';
else
array[i] = -1; /* not a number */
}
/* print results */
for(i = 0; i < length; ++i)
printf("%d\n", array[i]);
/* free the allocated memory */
free(array);
return EXIT_SUCCESS;
}
同时检查以下问题:
答案 3 :(得分:0)
你可以测试参数是否是一个数字whith isdigit()
http://www.cplusplus.com/reference/clibrary/cctype/isdigit/
并使用atoi功能。
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
使用时要小心
char* input = argv[1];
将字符串从argv复制到输入(在使用malloc之后),它更好。