代码之家  ›  专栏  ›  技术社区  ›  L. Messing

堆栈周围变量已损坏-C

  •  -1
  • L. Messing  · 技术社区  · 7 年前

    我用谷歌搜索了很多,花了大约2个小时来修复这个错误。 我得到以下错误:
    " 运行时检查失败#2-变量“buffer”周围的堆栈已损坏。 "

    我知道这与我的指针、sprintf\s函数或类似的函数有关。这个简单的程序应该只是 ',' 具有 '-' .

    我希望有人能给我一个提示来解决这个问题。我知道存在很多这样的问题,但没有一个能帮我纠正这个错误。

    #include "stdafx.h"
    #include <stdio.h>
    
    int strReplace(char *buffer, const rsize_t sizeBuffer,
        char *source, const rsize_t sizeSource,
        const char *substring, const rsize_t sizeSubstring,
        const char *replace, const rsize_t sizeReplace)
    {
        if (sizeBuffer < sizeSource || sizeBuffer < sizeReplace || sizeSource < sizeSubstring)
            return -1;
    
        char *p;
    
        p = strstr(source, substring);
        while (p != NULL)
        {
            strncpy_s(buffer, sizeBuffer, source, p - source);
    
            buffer[p - source] = '\0';
    
            sprintf_s(buffer + (p - source), sizeBuffer, "%s%s", replace, p + strlen(substring));
    
            strncpy_s(source, sizeSource, buffer, sizeBuffer);
            p = strstr(source, substring);
        }
    
        return 0;
    }
    
    int myFunc(char *source, const rsize_t sizeSource)
    {
        char *substring = ",";
        char *replace = "-";
        char buffer[100];
    
        strReplace(&buffer, 100, source, sizeSource,
            substring, 2, replace, 2);
    
        return 0;
    }
    
    int main()
    {
        char input[25] = "1,2,3,4,5,6,7,8,9,0";
    
        printf("input: %s\n", input);
        myFunc(&input, 25);
    
        _getch();
    
        return 0;
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    当你打电话的时候 sprintf_s() ,您将从 buffer . 因此,您需要通过该索引减少可用空间。它应该是:

        sprintf_s(buffer + (p - source), sizeBuffer - (p - source), "%s%s", replace, p + strlen(substring));