因为我对C很陌生,所以我还没有得到关于指针的东西。我想检查命令行参数是否为整数,但是在一个单独的函数中,以便我传入argv数组的指针。
int main(int argc, char* argv[]){
if(check(argv)){
// Do stuff to argv[1]
}
}
int check(char* p){
// Test wether p+1 is int
return 1;
}
我尝试了几件事,主要是导致奇怪的printf(当打印取消引用的指针来测试值时)。
int i = atoi(argv[1]);
当然,工作得很好。但由于指针是唯一传递给函数的东西,我瘫痪了。
答案 0 :(得分:0)
int check(char* p){
当您传递char
argv
数组时,上述函数需要指向char *
的指针
试试
int check(char* p[]){
在使用argv[1]
之前,请检查argv[1]
是否存在,即检查argc
int main(int argc, char* argv[]){
if(argc>1 && check(argv)){
// Do stuff to argv[1]
}}
答案 1 :(得分:0)
在索引指针数组之前,我们必须确保它是有效的。我们必须使用argc
来达到此目的。
strtol是一个解析字符串并检测错误的函数,如果它不是基本要求的话。
Ty this:
int main(int argc, char* argv[]){
if(check(argc, argv)){
// Do stuff to argv[1]
}
}
int check( int argc, char * argv[] ){
if( argc > 1 ) {
char * err = NULL;
strtol( argv[1], &err, 10 );
return argv[1][0] != '\0' && *err != '\0';
}
return 0;
}
答案 2 :(得分:0)
Argv是一个二维数组,也就是说argv是一个数组数组。具体来说,argv是一个char数组的数组。现在,argv存储的数据是从命令行传递给程序的参数,其中argv [0]是程序的实际名称,其余是参数。
现在,要回答您的问题,您不需要将argv完整地传递给函数“check”。你需要做的是传递一个argvs元素。这是因为“check”的参数是char数组,而argv是char数组的数组。所以尝试传递argv [1]来检查第一个参数。
编辑:尝试此操作以检查除程序名称之外的所有参数
#include <stdio.h>
#include <ctype.h>
int main(int argc, char* argv[]) {
for (int i = 1; i < argc; ++i) {
if( check(argv[i]) ){
// Do stuff to argv[i]
}
}
int check(char* p){
int i = 0;
char c = p[i];
while (c != '\0') {
if (!isdigit(c))
return 0;
c = p[++i];
}
return 1;
}