c - 在C中将字符串存储在数组中

标签 c arrays string pointers

我想存储一个字符串"hello"在字符数组 char arr[10]

当我运行以下代码时:

#include <stdio.h>

int main(void)
{
    char arr[10] = "Hello";
    printf("%s", arr);

}

输出生成良好。 但是当运行下面的代码时,我收到错误

#include <stdio.h>

int main (void)
{
    char arr[10];
    char * str = "Hello";
    arr = str;
    printf("%s", arr);
}

为什么在第一种情况下字符串可以存储在数组中,而在第二种情况下则不行? 有什么办法可以存储"hello"在第二种情况下?

最佳答案

如果您使用的是 BSD 系统或 macOS 并且可移植性不是主要考虑的问题,那么您应该使用 strncpy() 甚至更好的 strlcpy()

在C中,char *p表示指向字符串的指针。在编写以下内容时

char arr[10];
char * str = "Hello";
arr = str;

您可能认为存储在 str 指向的内存位置中的字符串将被复制到缓冲区 arr,但 C 不会为您执行此操作.

下面的代码可以满足您的需求

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

#define BUFSIZ 10

int main(){
    char arr[BUFSIZ];
    const char *str=“Hello”; /* I used const here */

    strncpy(arr, str, BUFSIZ);

    printf(“%s\n”, arr);

    return 0;
}

使用strncpystrlcpy而不是strcpystrncpy 的文档是 here .

关于c - 在C中将字符串存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441411/

相关文章:

javascript - 通过对记录进行分组来获取数组的映射

c - 为什么我的 "cat"系统调用函数比 Linux 的 "cat"慢?

C 从结构体数组中释放内存

c - 在 c 中将 bool 的结果打印为 'false' 或 'true' 的最佳方法?

arrays - 排名和不排名结合约束

c++ - 二维数组和嵌套循环

java - 如何使用扫描仪捕获txt文件中的字符串?

java - 在以字母字符串为前缀的数字前填充零

c++ - 管理单个字符串的内存

c - 考虑到函数被调用的次数,您将如何继续操作 C 中函数的返回值?