C语言技术问询:如何将char*内容存储到char数组中?
解决指针内容存到char数组的问题
嘿,咱们先拆解下你这段代码的逻辑:
char *output; char store[100]; output = store;
这里output已经直接指向了store数组的起始地址,也就是说**output和store共享同一块内存空间**——修改output指向的内容,本质就是修改store数组里的内容,反过来也成立。
我猜你大概率是想把output后续指向的其他内容(比如另一个字符串)复制到char数组里?下面分场景给你具体方案:
场景1:output指向了一个以\0结尾的字符串,要复制到store数组
这是最常见的情况,直接用标准库的字符串复制函数就行,记得先包含头文件<string.h>:
方法1:用strcpy(简单但要注意数组容量)
#include <string.h> // 假设output后来指向了某个字符串 output = "Hello Stack Overflow"; // 把output指向的字符串完整复制到store strcpy(store, output);
⚠️ 注意:必须保证store数组的大小足够容纳要复制的字符串(包括末尾的\0终止符),否则会触发缓冲区溢出,导致程序崩溃或异常。
方法2:用strncpy(更安全,限制复制长度)
如果不确定目标字符串的长度,优先用这个,能避免溢出:
#include <string.h> output = "Hello Stack Overflow"; // 最多复制sizeof(store)-1个字符,留一个位置存'\0' strncpy(store, output, sizeof(store) - 1); // 手动添加字符串终止符,因为strncpy如果没复制完整个字符串,不会自动加'\0' store[sizeof(store) - 1] = '\0';
场景2:要把output指向的内容复制到另一个char数组
比如你还有一个数组char backup[100];,想把output(也就是store)里的内容存进去,用法和上面一样:
strcpy(backup, output); // 等价于strcpy(backup, store); 因为output指向store
场景3:output指向的是二进制数据(非\0结尾)
如果不是字符串,而是没有终止符的二进制数据,要用memcpy来复制指定长度的内容:
#include <string.h> // 假设要复制50个字节的内容 size_t data_len = 50; memcpy(store, output, data_len);
这个函数会严格复制你指定的字节数,不需要依赖\0终止符。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

