#include <stdio.h>
#include <string.h>
int myatoi(char *str) {
int i, res = 0;
for (i = 0; str[i] != '\0'; ++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次。
答案 0 :(得分: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]
是&#34; xyz123&#34;会发生什么?例如。
答案 1 :(得分:1)
您的函数myatoi
已损坏:您应将return
语句移出for
循环。
以下是更正后的版本:
int myatoi(const char *str) {
int i, res = 0;
for (i = 0; str[i] != '\0'; ++i) {
res = res * 10 + str[i] - '0';
}
return res;
}
请注意,您的函数仅处理仅在数字上组成的字符串。没有标志,没有空格,不允许其他字符。您可以使用更灵活的标准函数,例如atoi
strtol
或<stdlib.h>
以下是您的代码的简化版本:
#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;
}
}