我想存储一个字符串"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;
}
使用strncpy
或strlcpy
而不是strcpy
。 strncpy
的文档是 here .
关于c - 在C中将字符串存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441411/