从 char * 复制到 char 数组

标签 c visual-c++

我的字符指针指向一些内存,说“Hello world”,我想将其与其他指针进行比较,然后想做 strcpy。我可以用 char * 来做

char *A ="hello"
char *B ="";

strcmp(A,B); // this compares correctly because B points to diff string
strcpy(B,A); // will this statment copies the string alone or both will point to same memory

最佳答案

char *B ="";

这意味着 B是一个指针,并且您指向常量字符串 ""

复制A字符串到 Bstrcpy(B,A);

这意味着您正在复制 A 的字符串到内存B指向(并且 B 指向常量字符串),因此这将导致未定义的行为

为了避免此类问题,B 指针应该指向内存空间,例如您可以将 B 指向使用 malloc 分配的动态内存空间:

char *B = malloc(10*sizeof(char));

您可以使用以下方法使内存大小与字符串大小完全相同:

char *B = malloc((strlen(A)+1)*sizeof(char));

+1 表示字符串的空终止符

避免该问题的另一种解决方案:将 B 定义为字符数组而不是指针:

char B[10];

关于从 char * 复制到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334736/

相关文章:

c - 在 windows 和 linux 上的 fopen 中使用 "r+"

c++ - 取消WIN32线程池中计划的work/io/timer项

c - 如何生成一个可以包含所有大于零的自然数的数组?

c - C语言中如何从文本文件中读取参数

c++ - 如何使用负值或零值格式化复数输出

visual-c++ - 什么是 .sym 文件以及如何从 Visual-C++ 使用它?

c - C语言中初始化数组的方法

c - 无法建立网络

c++ - std::chrono::duration_cast - 有比纳秒更精确的单位吗?

windows - 从指纹传感器保存的图像似乎已损坏