c - 在 C 中操作字符串的两种方式有什么区别?

标签 c string pointers

我想复制一个字符串 "str"到 p 。首先我使用我注释掉的代码,但是输出是空的。所以我尝试了评论区下面的代码,它起作用了。在 C 中操作字符串的两种方法有什么区别?提前致谢。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    int main(void)
    {
        char *str = "laekfja";
        char *p = (char*)malloc(51 * sizeof(char));

        //First try.
        /*  while(*str)             
                {                   
                    *p++ = *str++;  
                }                   
            *p = '\0';
            printf("%s\n", p);    
        */

        //Second try.
        int i = 0;
        while(i < strlen(str))
            {
              p[i] = str[i];
              i++;
            }
        p[i] = '\0';
        printf("%s\n", p);
        return 0;  
    }

最佳答案

这两种方法都可以复制字符串。第一种方法的错误是在循环完成时打印出复制的字符串:

printf("%s\n", p);

此时,p 指向插入副本的最后一个字符,即空字符,而不是字符串的开头。所以 printf() 正确地没有打印任何内容。

关于c - 在 C 中操作字符串的两种方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58722310/

相关文章:

c++ - SDL 指针和引用

pointers - 通过类型/种类/等级以外的方式区分 Fortran 中的泛型

c - 使用指针打印二维数组时出错

c - 试图理解断言的用处

c - Visual Studio 2010 C 项目 - 作为服务安装

c# - 为什么我们在尝试用另一个字符串替换它时将 @ 与 "\"一起使用

c - 传递参数 2 从整数生成指针而不进行强制转换

c - 你如何用 C 语言解释这个类似函数的宏 `slice` 的输出?

php-如何在 mysql 数据库输出上显示额外的空格?

c++ - 指针容器的指针别名