请有人帮我解决这个问题,以下C代码中的while循环似乎在* next == NULL时没有退出并尝试在Visual Studio 2010 Express中使用坏ptr调用strlen(* next) 。我已经尝试了所有我能想到的无济于事的东西。代码尝试在字符串数组中查找最短和最长的字符串。
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);
答案 0 :(得分:4)
您 应该 更改
*current++;
*next++;
到
current++;
next++;
两者都增加正常,但前者也是current
和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);
答案 1 :(得分: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);
答案 2 :(得分:-1)
%s需要指向char的指针,即char *。因此它必须是最短和最长的指针,而不是*最短和*最长,这是指针位置的值