我在向dest_buffer缓冲区写入8个字母数字符号时遇到问题。
我想将char从buff转换为十六进制,然后将值存储在 我的dest_buffer缓冲区的不同情况。
例如:
buff [0] = 58应该给我dest_buffer [0] =' 3'和dest_buffer [1] =' a' 等等达到8个字符。
src是char [8 * sizeof(int)+1]并且buff是相同的。 不幸的是,我只有这个输出:
2dbb771
*** stack smashing detected ***: ./a.out terminated
[1] 9843 abort (core dumped) ./a.out
这是我用来完成工作的循环
for (i = 0; i < 4*sizeof(int); ++i)
{
snprintf (
&dest_buff[i*sizeof(int)*2],
sizeof(int)*2,
"%x",
*(int*)&buff[i * sizeof(int)]
) ;
}
我知道我错过了一些东西,但我不知道什么,也不知道在哪里 你们谁帮助我? 感谢
编辑1:
以下是我的代码的另一部分:
int i, rndf ;
char buff[4*sizeof(int)+1];
rndf = open("/dev/urandom", O_RDONLY) ;
if( read (rndf, buff, 4*sizeof(int)) < 0)
{
fprintf (stderr, "%s\n", "An error occured while reading urandom") ;
exit (EXIT_FAILURE) ;
}
close(rndf) ;
此后循环
答案 0 :(得分:0)
您有堆栈损坏,因为char buff[4*sizeof(int)+1];
是您的变量。
我们假设sizeof(int)
为4
个字节。然后变量大小为17
个字节。
通过执行此操作:&dest_buff[i*sizeof(int)*2]
您有时访问(i = 3
)地址偏移3 * 4 * 2 = 24
,这超出了您的变量范围。
结论:您有未定义的行为。增加可变长度或纠正指针使用情况。