Compilando al volo il tuo codice con
codice:
$ gcc --version
i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
Copyright (C) 2005 Free Software Foundation, Inc.
si ottiene:
codice:
$ gcc main.c
main.c:1:18: error: string: No such file or directory
main.c: In function 'main':
main.c:20: warning: incompatible implicit declaration of built-in function 'strcat'
main.c:28: warning: incompatible implicit declaration of built-in function 'strcat'
correggendo quindi <string> in <string.h>
si ottiene:
codice:
$ gcc -Wall -ansi -pedantic -Wextra -Wconversion main.c
main.c: In function 'main':
main.c:9: warning: unused variable 'e'
main.c:29: warning: control reaches end of non-void function
cancellando quindi la non usata variabile "e" e aggiungendo l'istruzione "return 0;" a fine main finalmente riusciamo a compilare senza problemi.
Dando ora un'occhiata veloce al codice, si vede che la prima istruzione:
produrrà un comportamento indefinito se il programma verrà invocato con zero argomenti (oltre al nome del programma stesso).
Dalla seconda istruzione si vede che:
produrrà un comportamento indefinito se il programma verrà invocato con meno di due argomenti (oltre al nome del programma stesso).
dalla strcat nel corpo del ciclo for:
e considerata la documentazione della strcat stessa:
codice:
$ man strcat
#include <string.h>
char *
strcat(char * restrict s, const char * restrict append);
...
DESCRIPTION
The strcat() and strncat() functions append a copy of the null-terminated
string append to the end of the null-terminated string s, then add a ter-
minating `\0'. The string s must have sufficient space to hold the
result.
si intuisce che è normale che il tuo programma abbia un comportamento indefinito.
Perciò ti va bene che vada solo in crash senza causare altri danni.
;-)