Aja*_*har 0 c int pointers char memcpy
这可能是重复的,但我还没有找到任何其他涉及我的具体情况的问题。
这就是我想做的:
int n = 12;
char s[sizeof(n)];
memcpy(s, (char *)n, sizeof(n));
printf("%d", s);
Run Code Online (Sandbox Code Playgroud)
基本上,我想复制n到s而不需要获取 的地址n。当我运行它时,它给了我一个分段错误。然而,这有效:
printf("%d", (char *)n);
Run Code Online (Sandbox Code Playgroud)
所以我知道问题出在 memcpy 调用上。为什么我不能像这样将 int 复制到 char[] 中?
您会遇到分段错误,因为您尝试执行的操作不是代码所述的操作。
int n = 12;
char s[sizeof(n)];
memcpy(s, (char *)n, sizeof(n));
Run Code Online (Sandbox Code Playgroud)
你想说:
“将
sizeof(int)表示 值的字节复制n到s”。
但memcpy()涉及的是复制内存对象,而不是值。对象驻留在给定地址,并包含给定值。取值n给出值,取值&n给出地址。
该构造告诉编译器将 a的值(char *)n解释为a 的地址,所以您所说的是:nchar
“将包含在地址中的
sizeof(int)字节复制到 中。”ns
因为n = 12,您正在从地址读取0x00000012...这很可能不是一个合法的读取地址(因此出现段错误)。
通过在将其(而不是值)转换为n之前获取地址,您的语句符合您的意图:char *
int n = 12;
char s[sizeof(n)];
memcpy(s, (char *)&n, sizeof(n));
Run Code Online (Sandbox Code Playgroud)
“将地址处的
sizeof(int)字节复制到”。ns
| 归档时间: |
|
| 查看次数: |
4781 次 |
| 最近记录: |