求大lao解答,求解答

可以讲一下下面那个程序的执行过程吗?没看明白,
我觉得就应该输出2个*,它不是遇到\0就退出循环吗?

img

这个问题的确有趣,我测试了一番,如下代码是可以的

#include <stdio.h>

int main()
{
    char s[10] = "\ta\018bc";
    char *p = &s[0];
    s[2] = '\0';
    for (; *p != '\0'; p++)
        printf("*");
    return 0;
}

然后我写了这样的代码

#include <stdio.h>

int main()
{
    char *s = "\ta\018bc";
    for (; *s != '\0'; s++)
        printf("%d ", (int)*s);
    return 0;
}

9 97 1 56 98 99
这说明\01被当作了八进制的\1,而不是\0和1
继续测试

#include <stdio.h>

int main()
{
    char *s = "\ta\0\018bc";
    for (; *s != '\0'; s++)
        printf("*");
    return 0;
}

这个才是符合你本意的,并且输出两个*了。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7725779
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:输入一个字符串,编写递归函数将字符串按相反的顺序输出;
  • 除此之外, 这篇博客: 三子棋游戏思路中的 下面的代码每次打印一个数据,打印一个竖线 一行打印完之后换行打印横线。就是除了数据元素,再就是打印棋盘的结构,让我们的棋盘能显现出来。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • void DisplayBoard(char borad[ROW][COL], int row, int col)
    {
        int i = 0;
        for (i = 0; i < row; i++)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                printf(" %c ", borad[i][j]);
                if (j < col - 1)
                {
                    printf("|");
                }
            }
            printf("\n");
            if (i < row - 1)
            {
                for (j = 0; j < col; j++)
                {
                    printf("---");
                    if (j < col - 1)
                        printf("|");
                }
                printf("\n");
            }


        }
    }

  • 您还可以看一下 刘伶华老师的软件测试经典面试题剖析课程中的 工作中有遇到什么困难,怎么解决的?小节, 巩固相关知识点