int 的 C 命令行参数
C command line arguments to int
#include <stdio.h>
#include <string.h>
int myatoi(char *str) {
int i, res = 0;
for (i = 0; str[i] != '[=10=]'; ++i) {
res = res * 10 + str[i] - '0';
return res;
}
}
int main(int argc, char *argv[]) {
int j;
char str[] = " i want to get argv[2] value here";
int val = myatoi(str);
printf("%d", val);
if (argc == 3) {
for (j = 0; j < val; j++) {
printf("Hello, %s \n", argv[1]);
}
} else
if (argc < 3) {
printf("Not Enough Arguments\n");
} else
if (argc > 3) {
printf("Too Many Arguments\n");
}
return 0;
}
如何将 argv[2]
的值传递给 char str[]
,以便它将字符串转换为 int
并打印输出。
argv[0]
将是文件名,argv[1]
将是字符串,argv[2]
应该是 int
示例输出:./hello raju 2
Hello, raju!
Hello, raju!
因为 argv[2]
是 2 它应该打印 2 次。
您可以直接将argv[2]
传递给myatoi()
或使用变量:
char *str = argv[2];
int val=myatoi(str);
你最好在之前使用argv
添加一个输入检查,比如:
if (argc != 3) {
printf("Expected 2 args\n");
exit(1);
}
您的 myatoi()
遇到与 atoi()
标准功能类似的问题——缺乏检测和报告错误输入的能力。例如,考虑如果 argv[2]
是 "xyz123" 会发生什么。
您的函数 myatoi
已损坏:您应该将 return
语句移出 for
循环。
这是更正后的版本:
int myatoi(const char *str) {
int i, res = 0;
for (i = 0; str[i] != '[=10=]'; ++i) {
res = res * 10 + str[i] - '0';
}
return res;
}
请注意,您的函数仅处理完全由数字组成的字符串。没有符号,没有空格,不允许有其他字符。您可以使用更灵活的标准函数,例如在 <stdlib.h>
中声明的 atoi
或 strtol
这是您的代码的简化版本:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc == 3) {
int val = atoi(argv[2]);
for (int j = 0; j < val; j++) {
printf("Hello, %s\n", argv[1]);
}
return 0;
} else {
printf("error: 2 arguments expected\n");
return 1;
}
}
#include <stdio.h>
#include <string.h>
int myatoi(char *str) {
int i, res = 0;
for (i = 0; str[i] != '[=10=]'; ++i) {
res = res * 10 + str[i] - '0';
return res;
}
}
int main(int argc, char *argv[]) {
int j;
char str[] = " i want to get argv[2] value here";
int val = myatoi(str);
printf("%d", val);
if (argc == 3) {
for (j = 0; j < val; j++) {
printf("Hello, %s \n", argv[1]);
}
} else
if (argc < 3) {
printf("Not Enough Arguments\n");
} else
if (argc > 3) {
printf("Too Many Arguments\n");
}
return 0;
}
如何将 argv[2]
的值传递给 char str[]
,以便它将字符串转换为 int
并打印输出。
argv[0]
将是文件名,argv[1]
将是字符串,argv[2]
应该是 int
示例输出:./hello raju 2
Hello, raju!
Hello, raju!
因为 argv[2]
是 2 它应该打印 2 次。
您可以直接将argv[2]
传递给myatoi()
或使用变量:
char *str = argv[2];
int val=myatoi(str);
你最好在之前使用argv
添加一个输入检查,比如:
if (argc != 3) {
printf("Expected 2 args\n");
exit(1);
}
您的 myatoi()
遇到与 atoi()
标准功能类似的问题——缺乏检测和报告错误输入的能力。例如,考虑如果 argv[2]
是 "xyz123" 会发生什么。
您的函数 myatoi
已损坏:您应该将 return
语句移出 for
循环。
这是更正后的版本:
int myatoi(const char *str) {
int i, res = 0;
for (i = 0; str[i] != '[=10=]'; ++i) {
res = res * 10 + str[i] - '0';
}
return res;
}
请注意,您的函数仅处理完全由数字组成的字符串。没有符号,没有空格,不允许有其他字符。您可以使用更灵活的标准函数,例如在 <stdlib.h>
atoi
或 strtol
这是您的代码的简化版本:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc == 3) {
int val = atoi(argv[2]);
for (int j = 0; j < val; j++) {
printf("Hello, %s\n", argv[1]);
}
return 0;
} else {
printf("error: 2 arguments expected\n");
return 1;
}
}