Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 堆栈崩溃,找不到溢出错误_C_Buffer Overflow_Strncpy_Stack Smash - Fatal编程技术网

C 堆栈崩溃,找不到溢出错误

C 堆栈崩溃,找不到溢出错误,c,buffer-overflow,strncpy,stack-smash,C,Buffer Overflow,Strncpy,Stack Smash,我正在尝试编写一个函数,如果字符串的长度小于分配给char缓冲区的最大大小,则该函数将用一些字符填充字符串。我遇到一个“*检测到堆栈崩溃*:./test terminated”错误,该错误使我的测试程序停止,因为我假设某个地方有溢出,覆盖了一些受保护的内存。这似乎是一个简单的函数,但我似乎无法找到错误的原因 void pad_string2(char* buf, size_t buf_size, char* str, char* pad) { strncpy(buf, str, bu

我正在尝试编写一个函数,如果字符串的长度小于分配给char缓冲区的最大大小,则该函数将用一些字符填充字符串。我遇到一个“*检测到堆栈崩溃*:./test terminated”错误,该错误使我的测试程序停止,因为我假设某个地方有溢出,覆盖了一些受保护的内存。这似乎是一个简单的函数,但我似乎无法找到错误的原因

void pad_string2(char* buf, size_t buf_size, char* str, char* pad) {
      strncpy(buf, str, buf_size);
      size_t pad_size = buf_size - strlen(str);
      printf("pad size: %zu\n", pad_size);
      if (pad_size > 0) {
         unsigned int i = 0;
         while(i < (pad_size - 1)) {
            strncpy((buf + strlen(str) + i), pad, buf_size);
            i++;
         }
      }
      buf[buf_size - 1] = '\0';
} 
有人能帮忙吗

谢谢

这句话:

strncpy((buf + strlen(str) + i), pad, buf_size);
最终会写下你不该写的东西
buf_size
对于您尝试执行的操作来说太大。使用:

strncpy((buf + strlen(str) + i), pad, 1);

想想看!我应该更加关注strncpy及其参数规范。但感谢您的帮助和快速响应!
strncpy((buf + strlen(str) + i), pad, 1);