c-双指针字符操作



假设我有char **argv

首先,如何打印出argv中的所有字符串?我尝试了以下方法:

char *temp;
temp = *argv; // Now points to the first string?
while (temp != NULL) {
    printf("%s ", temp);
    temp++;
}

在这里,当temp递增时,它只跳过一个字符。为什么会发生这种情况?我知道argv是一个包含点的数组。每个指针都指向一个char*数组。如果是这样,为什么不起作用?我知道,由于temp的类型是char,增加该指针将使其增加1字符(或字节)。如果是这样,我如何将指针递增到下一个数组并打印出该字符串?

它只跳过一个字符,因为temp是指向char的指针。通过添加一个,您告诉编译器将指针移动到内存中的下一个char

CCD_ 12是一个指针数组。您需要做的是在每次迭代中转到下一个指针。类似于:

char **temp = argv;  // temp is a pointer to a *pointer*, not a pointer to a *char*
while (*temp != NULL) {
    printf("%s ", *temp);
    temp++;
}

您需要增加argv,而不是*argv。对于本地副本,这看起来是这样的:

for (char ** p = argv; *p; ++p)      // or "*p != NULL"
{
    char * temp = *p;                // now points to the first string!
    printf("%s ", temp);             // or just "printf("%s", *p);"
}

首先,您需要了解char** argv是什么。它是指向char的指针数组。此数组中的指针不一定位于地址空间中彼此靠近的任何位置。你想要的是:

char** temp;
temp = argv;
while(temp != argv + argc) {
    printf("%s ", temp);
    temp++;
}

您需要有一个指向数组第一个元素的指针,以指向char的指针。相反,增加它。

您必须增加argv而不是*argv。请注意,如果您的argvmain函数的参数,则它是可修改的,您可以这样使用它:

    while (*argv++) {
        printf("%sn", *argv);
    }

您可能想要做的是:

char* a = argv[0];  // first arg
char* b = argv[1];  // second arg
char* c = argv[2];  // third arg

相当于:

char* a = *(argv + 0);
char* b = *(argv + 1);
char* c = *(argv + 2);

然后你会想把它概括成一个循环。

最新更新