Mikelius ha scritto:
char abc[]="abc" in realtà è char abc[]="abc\0" , infatti viene inserito 'EOF a fine stringa, cosa che non avviene nelle stringhe testuali...
Non diciamo eresie. In base a codesto bizzarro principio, non potrebbe funzionare neppure la più banale strcpy(array, "stringa")! Il terminatore '\0' è
sempre considerato parte di
ogni stringa letterale in fase di compilazione, senza distinzioni, e sarebbe assurdo il contrario. In fase di assegnazione iniziale, il terminatore viene copiato nell'array
solo e unicamente perché già presente nella stringa letterale.
L'OP commette sicuramente altri errori.
Il seguente codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int x;
char abc[] = "abc";
char stringa[] = "abc";
x = strcmp(abc, stringa);
printf("x = %d\n", x);
x = strcmp(abc, "abc");
printf("x = %d\n", x);
x = strcmp("abc", stringa);
printf("x = %d\n", x);
return EXIT_SUCCESS;
}
Deve compilare correttamente e fornire esattamente il risultato atteso.
x = 0
x = 0
x = 0
D'altro canto, l'assoluta equivalenza semantica col codice seguente riconferma la banale regola appena enunciata e sgombra il campo da ogni possibile dubbio. Qualsiasi occorrenza di una stringa letterale è null terminated, in qualunque versione dello standard C e con qualsiasi compilatore.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRINGA "abc"
int main()
{
int x;
char abc[] = STRINGA;
char stringa[] = STRINGA;
x = strcmp(abc, stringa);
printf("x = %d\n", x);
x = strcmp(abc, STRINGA);
printf("x = %d\n", x);
x = strcmp(STRINGA, stringa);
printf("x = %d\n", x);
return EXIT_SUCCESS;
}