假设我有char **argv
。我如何确定其大小?
我有一个字符串 - 例如:sleep 30 &
保存在argv
中。我希望能够访问*argv
中的最后一个数组。在这种情况下,最后一个数组包含&
。我该如何访问它? strlen(argv)
似乎无法正常运作。 sizeof()
显然无法正常工作,因为**argv
是指针。
注意:我不是在{(1}}讨论main()中的参数,因此,我没有**argv
或任何其他指示字符串的长度。
答案 0 :(得分:5)
编辑:编辑使用自定义字符串数组。 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
,因此您可以在计数中包含垃圾或导致分段错误。
答案 1 :(得分:0)
传递像argc这样的计数是最常见的用法 - 但是你说你没有那个。
然后通常的方法是让argv的最后一个元素指向NULL以指示它是最后一个数组元素。
int argc = 0;
while (*argv++) {
argc++;
}
答案 2 :(得分:0)
您可能需要使用strtok
来标记参数并完成它们,直到您拥有最后一个参数。
答案 3 :(得分:0)
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