GNU/Linux >> Znalost Linux >  >> Linux

Výukový program programování v Linuxu C Část 9:Řetězce

V této probíhající sérii výukových programů programování v jazyce C jsme se již dotkli konceptu znakových polí. S poli znaků úzce souvisí koncept řetězců, o kterém zde budeme diskutovat.

Řetězec se liší od pole znaků v jedné hlavní oblasti – je zakončen znakem Null '\0'. V poli znaků není žádný takový ukončovací znak. Následující část kódu ukazuje několik způsobů, jak lze definovat řetězec:

#include 

int main()
{
char str[] ="string";
char str1[] ={ 's','t','r','i','n','g','\0'};
char str2[10] ="string";
char str3 [10] ={'s','t','r','i','n','g','\0'};
char *str4 ="string";

printf("\n str=%s, str1=%s, str2=%s, str3=%s a str4=%s", str, str1, str2, str3, str4);

vrátí 0;
}

Takže hromada znaků ve dvojitých uvozovkách je řetězec (ukončení znaku Null je tam implicitní) a řada znaků explicitně končících znakem \0 je také řetězec.

Výstup tohoto programu je:

 str=řetězec, str1=řetězec, str2=řetězec, str3=řetězec a str4=řetězec

Mějte na paměti, že tímto způsobem nelze tisknout pole neřetězcových znaků, protože tam není žádný ukončující znak Null, který by znamenal konec pole. Zde je část kódu, která se o to pokouší:

#include 

int main()
{
char str[] ={'e','n','d'};
char c ='t';

printf("\n str=%s", str);

return 0;
}

Ale nakonec se místo toho na konci vytisknou nesmyslné hodnoty:

str=end??

Pokračujeme, stejně jako specifikátor formátu %s v 'Printf' říká kompilátoru, aby zacházel se vstupními proměnnými jako s řetězci, můžete také použít %s ve funkci 'scanf' k přijetí řetězců jako vstupu od uživatele. Zde je příklad:

#include 

int main()
{
char str[30];

printf("\n Zadejte řetězec o délce menší než 30 znaků:");
scanf("%s",str);

printf("\n str=%s", str);

vrátí 0;
}

Stojí za zmínku, že sekvence nula nebo více znaků obklopená dvojitými uvozovkami se nazývá řetězcová konstanta nebo řetězcový literál. To znamená, že jak "howtoforge" tak "" jsou řetězcové konstanty nebo řetězcové literály.

Délku řetězce můžete zjistit pomocí standardní funkce strlen(). Zde je příklad:

#include 

int main()
{
char str[] ="howtoforge";

printf( "\n Délka řetězce 'howtoforge' je:%d", strlen(str));

return 0;
}

Výstup vytvořený tímto programem je 10, což je přesně počet znaků v 'howtoforge', a tedy i jeho délka.

Pokračujeme, stojí za to mít na paměti, že znak v jednoduchých uvozovkách (jako 'd') a znak ve dvojitých uvozovkách (jako "d") se navzájem liší. Zatímco první je znaková konstanta (která může být použita k vytvoření číselné hodnoty znaku ve znakové sadě stroje), druhá je řetězec (to znamená, že obsahuje ukončovací znak \0).

Nakonec se rychle podívejme na to, jak lze řetězce předávat jako argumenty funkcím.

#include 

void change_value(char s[])
{
s[0] ='H';
s[ 5] ='F';

printf("%s", s);

}

int main()
{
char str[] ="howtoforge";

change_value(str);

return 0;
}

Takže ve výše uvedeném programu je to název pole 'str', který je předán jako argument, protože odkazuje na základní adresu pole. Deklarace funkce 'change_value' je taková, že jako vstup očekává pole. Zde je výstup tohoto programu:

HowtoForge                                                                                                                          

V tomto tutoriálu jsme tedy diskutovali o základech řetězců, včetně toho, jak jsou definovány a jak je lze používat. Více o řetězcích se dozvíme v následujících tutoriálech, ale tento článek by vám měl stačit, abyste mohli začít. Pokud máte nějaký dotaz nebo pochybnosti týkající se řetězců, dejte nám vědět v komentářích níže.


Linux
  1. C Výukový program programování Část 3 - Základy proměnných

  2. C Výukový program programování Část 5 - Znakové proměnné

  3. Výukový program programování v Linuxu C Část 10 - Variabilní rozsahy

  1. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  2. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  3. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  1. Linux C výukový program programování část 14 - praktické příklady bitových operátorů

  2. Výukový program programování v Linuxu C Část 12 – Operátory přiřazení a podmíněné výrazy

  3. Linux C výuka programování, část 11 - Aritmetické, relační a logické operátory