3

请有人帮我解决这个问题,当 *next == NULL 并尝试在 Visual Studio 2010 Express 中使用错误的 ptr 调用 strlen(*next) 时,以下 C 代码中的 while 循环似乎没有退出。我已经尝试了我能想到的一切都无济于事。该代码尝试在字符串数组中查找最短和最长的字符串。

char *stringsInArray[] = {"green mats", "cat", "sat", "on", "the", "green mat", NULL};
char *shortest, *longest, **current, **next, **end;

current = stringsInArray;
next = stringsInArray + 1;
shortest = stringsInArray[0];
longest = stringsInArray[0];

while (*next != NULL) 
{
    if (strlen(*current) < strlen(*next))
    {
        if (strlen(shortest) > strlen(*next))
            shortest = *next;
        if (strlen(*current) < strlen(shortest))
       shortest = *current;
        if (strlen(*next) > strlen(longest))
            longest = *next;
    }  
    else
    if (strlen(*current) > strlen(*next))
    {
        if (strlen(*current) > strlen(longest))
      longest = *current;
        if (strlen(*next) < strlen(shortest))
      shortest = *next;
    }
    else // strlen(*stringsInArray) == strlen(*next)
    {
        // do nothing
    }

   *current++;
   *next++;
} 

printf("shortest string: %s\n",*shortest);
printf("longest string: %s\n",*longest);
4

3 回答 3

4

应该改变

*current++;
*next++;

current++;
next++;

两者都可以增加,但前者也取消引用/返回值currentand next; 这是不需要的。

但是,您的问题是:

printf("shortest string: %s\n", *shortest);
printf("longest string: %s\n",  *longest);

在这里,您尝试使用字符串作为格式打印字符。

这应该有效:

printf("shortest string: %s\n", shortest);
printf("longest string: %s\n",  longest);
于 2012-04-05T19:29:12.677 回答
0

代码实际上按预期工作-您只需要更改

printf("shortest string: %s\n",*shortest);
printf("longest string: %s\n",*longest);

printf("shortest string: %s\n",shortest);
printf("longest string: %s\n",longest);
于 2012-04-05T19:30:42.013 回答
-1

%s 需要一个指向 char 的指针,即 char *。因此,它必须是最短和最长的,它们是指针,而不是 *shortest 和 *longest,它们是指针位置的值

于 2015-01-24T00:07:25.970 回答