[英]*** 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.