假设我有char **argv
. 我如何确定它的大小?
我有一个字符串 - 一个例子是:sleep 30 &
它保存在argv
. 我希望能够访问*argv
. 在这种情况下,最后一个数组包含&
. 我怎样才能访问它?strlen(argv)
似乎无法正常工作。sizeof()
显然不能正常工作,因为**argv
它是一个指针。
注意:我不是在谈论**argv
main() 中的参数,因此,我没有argc
或任何其他指示字符串有多长的指标。
编辑:编辑为使用自定义的字符串数组。指针指示数组的NULL
结尾。尽管这声明了一个由 4 个字符串组成的数组,但此方法可以与动态大小的数组一起使用。
#include <stdio.h>
int main()
{
char* custom[4] = { "sleep", "30", "&", NULL };
int last;
for (last = 0; custom[last + 1]; last++);
printf("%i - %s\n", last, custom[last]);
return 0;
}
// ./a.out
// > 2 - &
为此,您必须在构建程序时编辑程序以NULL
在您的程序中显式包含一个额外的字符串。char**
如果没有该指示符,最后一个字符串之后的地址不一定是NULL
,因此您可能会在计数中包含垃圾或导致分段错误。
传递像 argc 这样的计数是最常见的用法 - 但你说你没有那个。
然后通常的方法是让 argv 的最后一个元素指向 NULL 以表明它是最后一个数组元素。
int argc = 0;
while (*argv++) {
argc++;
}
您可能需要使用strtok
来标记参数并处理它们,直到您拥有最后一个。
char *argv[] = {"abc","123","xya"};
//prints the last string
printf("%s",a[strlen(*a)-1]);
// 如果您确定字符串数组以 NULL 结尾
char *temp = 0 ;
while(*argv){
temp = *argv;
(*argv)++;
}
//temp has the last string