繁体   English   中英

***检测到堆栈粉碎***:已终止。 任何解决方案?

[英]*** stack smashing detected ***: terminated. Any Solutions?

我似乎无法弄清楚是什么导致了这个问题。 我在使用 Ubuntu 并使用 Geany 进行编码的虚拟机上。 一切都应该是正确的,但它仍然会弹出,所以我是用完了 memory 还是缓冲区过载? 有人有想法吗? 非常感谢任何反馈。 绕过 GCC 堆栈粉碎检测是否安全? 先感谢您。

#define MAX_STR 40

void ProcessPerson(char entry[]);
int main(void)
{
    char data[][MAX_STR] = {"Maria,Kask",
                            "Johanna-Maria,Kask",
                            "Kalev Kristjan,Kuusk"};
    int i;
    int numOfPeople = sizeof(data) / MAX_STR;

    printf("Number of people: %d\n\n", numOfPeople);
    for (i = 0; i < numOfPeople; i++)
    {
        ProcessPerson(data[i]);
    }

    return 0;
}

    void ProcessPerson(char entry[])
    {
    int i, j;
    char str[2][4] = {""};

    printf("Processing line: '%s'\n", entry);
   

    for (i = 0; i < 40; i++)
    {
        j = 0;
        while (j < 4)
        {
            str[0][j] = entry[j];

            j++;
        }

        if (entry[i] == ',')
        {
            break;
        }
    }

    str[0][strlen(str[0]) - 1] = '\0';  

    j = 0;
    i++;
    while (j < 4)
    {
        str[1][j] = entry[i];
        i++;
        j++;
    }

    str[1][strlen(str[1]) - 2] = '\0';
    str[0][0] = str[0][0] + 32;
    str[1][0] = str[1][0] + 32;

    for (i = 0; i < 40; i++)
    {
        if (entry[i] == ',')
        {
            entry[i] = ' ';
            break;
        }
    }

    char email[14] = " ";
    strcat(email, str[0]);
    strcat(email, str[1]);
    strcat(email, "@ttu.ee");   

    printf("Nimi: %s\n", entry);
    printf("E-post:%s\n\n", email);
    }

 str[1][strlen(str[1]) - 2] = '\0';

您没有 null 终止str[1] ,因此您不能明智地调用strlen(str[1]) 更重要的是,在将四个字符复制到str[1]之后, str中甚至没有空间用于终止 null 字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM