双指针字符串的大小是多少?

时间:2012-03-14 02:21:04

标签: c string strlen arrays

假设我有char **argv。我如何确定其大小?

我有一个字符串 - 例如:sleep 30 &保存在argv中。我希望能够访问*argv中的最后一个数组。在这种情况下,最后一个数组包含&。我该如何访问它? strlen(argv)似乎无法正常运作。 sizeof()显然无法正常工作,因为**argv是指针。

注意:我不是在{(1}}讨论main()中的参数,因此,我没有**argv或任何其他指示字符串的长度。

4 个答案:

答案 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来标记参数并完成它们,直到您拥有最后一个参数。

Referemce for 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