在从一个缓冲区转换到另一个缓冲区时堆叠粉碎

时间:2017-06-26 12:11:54

标签: c

我在向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) ;

此后循环

1 个答案:

答案 0 :(得分:0)

您有堆栈损坏,因为char buff[4*sizeof(int)+1];是您的变量。

我们假设sizeof(int)4个字节。然后变量大小为17个字节。

通过执行此操作:&dest_buff[i*sizeof(int)*2]您有时访问(i = 3)地址偏移3 * 4 * 2 = 24,这超出了您的变量范围。

结论:您有未定义的行为。增加可变长度或纠正指针使用情况。

相关问题