C:通过指针访问第二个 argv
C: Accessing the second argv via a pointer
由于我是 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]);
当然,效果很好。但是由于指针是唯一传递给函数的东西,所以我瘫痪了。
int check(char* p){
当你传递 argv
时,上面的函数需要一个指向 char
的指针,它是 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]
}}
在索引指针数组之前,我们必须确保它是有效的。为此,我们必须使用 argc
。
strtol 是一个解析字符串并检测错误的函数,如果它不是所要求的基础。
输入这个:
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] != '[=10=]' && *err != '[=10=]';
}
return 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 != '[=10=]') {
if (!isdigit(c))
return 0;
c = p[++i];
}
return 1;
}
由于我是 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]);
当然,效果很好。但是由于指针是唯一传递给函数的东西,所以我瘫痪了。
int check(char* p){
当你传递 argv
时,上面的函数需要一个指向 char
的指针,它是 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]
}}
在索引指针数组之前,我们必须确保它是有效的。为此,我们必须使用 argc
。
strtol 是一个解析字符串并检测错误的函数,如果它不是所要求的基础。
输入这个:
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] != '[=10=]' && *err != '[=10=]';
}
return 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 != '[=10=]') {
if (!isdigit(c))
return 0;
c = p[++i];
}
return 1;
}