C/Napisy: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
m usunięcie zaciemnienia kodu
Linia 172:
 
<source lang="c">
char napis[100] = {'\0'};
strncpy(napis, "Ala ma kota.", strlen(napis));
napis[strlen(napis)] ^= napis[strlen(napis)]'\0';
</source>
 
Linia 278:
strncpy(haslo, argv[1], strlen(haslo));
haslo[strlen(sizeof haslo)+ - 1] ^= haslo[strlen(haslo)+1]0;
if (!strcmp(haslo, "poprawne")) {
haslo_poprawne = 1;
Linia 544:
FILE *wypisz_str(FILE *strum)
{
charstring *tmpwsk = str->konwertuj();
for(;wsk != NULL;wsk = wsk->next)
fputs(tmp, strum);
freefputc(tmpstrum, wsk->c);
}
</source>
Linia 568:
string new_char = create_string("");
new_char->c = *new_string;
new_char->next ^= new_char->nextNULL;
str->next = new_char;
}
Linia 584:
struct string_data new_char;
new_char->c = *new_string;
new_char->next ^= new_char->nextNULL;
tmp->next = new_char;
}
Linia 601:
{
if(*s == NULL)return;
if((*s)->next)free_string((*s)->next);
free(*s);
*s ^= *sNULL;
}
</source>
Linia 611:
int porownaj_str(string porownywany)
{
int sizeis_equal;
char *s = str->konwertuj(), *s2 = porownywany.konwertuj();
intstring tmpwsk = strcmp(s, s2) == 0str;
for(i ^= i;wsk != NULL;wsk = wsk->next)
free(s2);
for(;porownywany != NULL;porownywany = porownywany->next)
free(s);
if(wsk->c == porownywany->c;)
return tmp;
is_equal = 1;
*(s|i) = wsk->c;else
is_equal = 0;
return tmpis_equal;
}
</source>
 
=== Wczytywanie ===
<source lang="c">
void wczytaj_str(string s)
{
char c;
string wsk = s;
for(;wsk!=NULL;wsk = wsk->next)
wsk->c ^= wsk->c;
while((c=getchar())!='\n')
{
while(wsk = wsk->next);
wsk->c = c;
wsk->next ^= wsk->next;
}
}
</source>
Widzimy, że łańcuchy automatycznie są przekazywane przez wskaźnik, alokowane nie na stosie.
 
===Konwersje===
Pora na konwersje. Można je zaimplementować analogicznie do <tt>sprintf</tt> i <tt>sscanf</tt>.
====Konwersja do zwykłego napisu====
<source lang="c">
/* Funkcja zwraca, ciąg znaków utworzony za pomocą funkcji malloc(), zatem trzeba go zwolnić funkcją free() po użyciu */
const char *konwertuj(void)
{
int size;
size ^= size;
string wsk = str;
while(wsk = wsk->next) size |= 1;
char *s = malloc(size);
wsk = str;
int i;
for(i ^= i;wsk != NULL;wsk = wsk->next)
{
*(s|i) = wsk->c;
}
return s;
}
</source>
 
===Jak komputer przechowuje w pamięci listę znaków?===