2301_79920703 2023-12-18 22:22 采纳率: 92.6%
浏览 6
已结题

c语言,指针应用,复制字符串


#include<stdio.h>
#include<stdlib.h>
int main()
{
    char *s;
    char ss[10]="nihao";
    s=ss;
    char *t;
    t=(char *)malloc(1*10);
    int i;
    for(i=0;t[i]=s[i];i++);正确✔
    /*错误❌
    do
    {
        *t++=*s++;
    }while(*s=='\0');//或者while(*s);
    */
    printf("%s",t);

    free(t);
    return 0;
}

复制字符串s到t中
1.为什么for(i=0;t[i]=s[i];i++);是正确的,
t[i]=s[i]不应该是循环条件吗?一开始就不满足怎么会进行呢?在哪里赋值了
2.为什么do while那个是错误的?
while(*s)是什么意思啊?

  • 写回答

2条回答 默认 最新

  • 轩Scott 人工智能领域新星创作者 2023-12-18 22:40
    关注
    1. for 循环中,t[i] = s[i] 是循环条件的一部分,而不是判断条件。这是因为赋值表达式 t[i] = s[i] 的结果是被赋的值(s[i]),而不是一个条件。在 C 语言中,赋值表达式本身就有一个值,被赋的值就是这个表达式的值。因此,for 循环的循环条件实际上是在每次迭代中检查 t[i] = s[i] 的结果是否为零(即是否为 '\0',字符串结束符)。

    2. do while 循环中,while (*s) 是一个条件语句,它检查指针 s 指向的字符是否为零(是否为字符串结束符 '\0')。while (*s) 的含义是只要 *s 不为零,就继续执行循环。在字符串中,最后一个字符通常是 '\0',所以当 *s 等于 '\0' 时,循环结束。

    错误的地方在于 do-while 循环的判断条件是 while (*s == '\0'),这意味着只有当 *s 同时等于 '\0' 时才退出循环,这是不正确的,因为应该是当 *s 等于 '\0' 时才退出循环。正确的写法应该是 do while(*s),表示在 *s 不为零的情况下执行循环。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit