Ik krijg ‘Ongeldige initialisatie’, wat doe ik verkeerd?

Ik krijg foutmelding: “ongeldige initializer” op de regel met revS. Wat doe ik verkeerd?


Antwoord 1, autoriteit 100%

Je kunt revS niet op die manier initialiseren, je hebt iets heel specifieks nodig rechts van de =. Van C11 6.7.9 Initialization /14, /16:

14/ Een array van tekentype kan worden geïnitialiseerd door een letterlijke tekenreeks of UTF?8 letterlijke tekenreeks, optioneel tussen accolades.

Opeenvolgende bytes van de letterlijke tekenreeks (inclusief het afsluitende null-teken als er ruimte is of als de array een onbekende grootte heeft) initialiseren de elementen van de array.

: : :

16/ Anders is de initialisatie voor een object met het type aggregatie of unie een lijst met initialen tussen haakjes voor de elementen of benoemde leden.


Om hetzelfde resultaat te bereiken, kunt u uw code vervangen door:

int main (void) {
    char testStr[50] = "Hello, world!";
    char revS[50]; strcpy (revS, testStr);
    // more code here
}

Dat is technisch gezien geen initialisatie maar levert hetzelfde functionele resultaat op. Als je echt wilt initialisatie, kun je zoiets gebruiken als:

#define HWSTR "Hello, world!"
int main (void) {
    char testStr[50] = HWSTR;
    char revS[50] = HWSTR;
    // more code here
}

Antwoord 2, autoriteit 24%

Arrays zijn niet toewijsbaar.

U moet memcpy gebruiken om inhoud van testStr naar revS

te kopiëren

memcpy(revS,testStr,50);

Antwoord 3, autoriteit 12%

Alleen constante expressies kunnen worden gebruikt om arrays te initialiseren, zoals in uw initialisatie van testStr.

Je probeert revS te initialiseren met een andere arrayvariabele, die geen een constante expressie is. Als je de inhoud van de eerste string naar de tweede wilt kopiëren, moet je strcpy gebruiken.


Antwoord 4, autoriteit 6%

Een initialisatie voor een char[] moet een letterlijke tekenreeks zijn of iets als {1,2,3,4}. Het mag niet de naam van een andere variabele zijn.


Antwoord 5, autoriteit 3%

Tenzij u van plan bent de tweede array te manipuleren, kunt u ook een aanwijzer gebruiken:

int main(void){
    char textStr[50] = "hello worlds!";
    char *revS = textStr;
    printf("%s\n", revS);

}

Als je echt gek wilt worden, kun je naar een specifieke locatie in de array wijzen met de referentie-operator:

int main(void){
    char textStr[50] = "hello worlds!";
    char *revS = textStr+5; // or &textStr[5]
    printf("%s\n", revS);
}

Antwoord 6

Je doet het

char revS[50] = testStr; 

wat niet klopt aangezien je char * niet kunt toewijzen aan char.

Probeer revS = testStr; het zou moeten werken.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes