эта тема может быть старой, но я хочу что-то добавить к ней
(возможно, кто-то найдет его в будущем).
Если вы скомпилировали эту программу
#include <stdio.h>
#include <stdlib.h>
void
myFunction(char *args)
{
char buff1[12];
char buff2[4] = "ABC";
strcpy(buff1,args);
printf("Inhalt Buffer2: %s",buff2);
}
int main(int argc, char *argv[])
{
if(argc > 1)
{
myFunction(argv[1]);
}
else
printf("no arguments sir daimler benz");
getchar();
return 0;
}
с "gcc", и вы передаете его "AAAAAAAAAAAAAAAAAAAAAAAAA" в качестве аргумента, он не будет переполнен в buffer2, в то время как это происходит, если вы скомпилировали с "cc", что для меня является подсказкой, что если вы использовали "gcc" управление памятью работает по-другому, возможно, помещая пространство между сегментами памяти полей buff1 и buff2?
Может быть, кто-то с большим опытом может осветить тьму здесь.