Hvad er forskellen mellem scanf ("% s", & x) og erklære char * x = "streng"?


Svar 1:

scanf ("% s", & x) læser input fra stdin, som er array med tegn, og gør x-punkter til arrayen. Et eksempel givet nedenfor:

char x [50] ← Dette gør, at x er en markør til en karaktergruppe

printf ("Hvad er dit navn? \ n") ← stdout

scanf (“% s”, x) ← dette gør x-punkter til det tegnarray, du har indtastet, og som er dit navn

På den anden side opretter char * x = "streng" bare en markør x, og den peger på tegneserien "streng". Der er ikke noget stdin / stdout-engagement her.


Svar 2:

Det øverste niveau er, at med scanf kommer indholdet af strengen fra standardindgangen til programmet, mens i “streng” -sagen, indholdet af strengen er samlet til programmet.

Det næste niveau af forskel er, at lagring af "streng" er skrivebeskyttet, og strengen ikke kan ændres uden kopiering, mens i scanf-sagen vil indholdet af strengen være i læse-skrivehukommelse og kunne ændres senere på plads.

Det tredje niveau af forskel er, at “streng” -sagen er korrekt programmering, mens scanf-sagen ikke viser erklæringen af ​​x, eller om der faktisk er plads der til at placere strengen, som den læses i. I bedste fald er den ufuldstændig . “& X” er også en konstruktion, der sandsynligvis ikke er korrekt i dette tilfælde. Scanf-sagen er også en sikkerhedskatastrofe, fordi den ikke sikrer, at inputstrengen faktisk passer ind i det medfølgende lager, så det er let bytte for et bufferoverløbsangreb.