Hej, jak wyżej
int cyfra = 8;
char znak = cyfra;
char znak = "5";
int cyfra = znak;
???
I czy z tablicami jest tak samo, analogicznie?
char *znaki = "123456";
int duza_cyfra = *znaki;
Chodzi oto by zmieniac “1234” na 1234 (chara -> na inta) ??
Rower1985
(Ostaszewianin)
#2
int duza_liczba = atoi(znaki);
BTW -> char(8) != ‘8’, char(8) jest jednym z białych znaków.
BTW2 -> “8” nie jest typu char, a char*. Miałeś na myśli pewnie ‘8’.
http://www.asciitable.com/
Chce zmienić tylko typ zmiennej a nie wartość.
z (char) “8” na normalne 8 (int)
Ale “8” nie jest typu char.
Jest wskaźnikiem, więc dostaniesz w wyniku adres w pamięci:
MacBook:~ enedil$ cat char.c
#include <stdio.h>
int main()
{
printf("%d\n", (int)"8");
return 8;
}
MacBook:~ enedil$ clang char.c
MacBook:~ enedil$ ./a.out
113119134
więc aby zamienić
char znak = "9";
int cyfra = (int)znak;
a w przypadku “tablicy”, to tak
char znaki[] = "2015";
int cyfra = (int)znaki;
???
NIE NIE NIE!
Czudzysłów oznacza C-Stringa, czyli jest de iure wskaźnikiem do chara, a de facto ciągiem znaków zakończonym znakiem \0 (null).
Zatem, typem wyrażenia “8” jest char*, a nie char.
Zresztą, sam spróbuj skompilować i uruchomić Twoje snippety i zobacz, że wyniki znacznie odbiegają od Twoich oczekiwań.
hindus
(hindus)
#8
No i warto pamiętać, że ‘0’ = 48, a nie 0
nintyfan
(nintyfan)
#9
Należy pamiętać, że char jest liczbą, a int też jest liczbą. Natomiast rzutowanie i przypisanie z int to char może spowodować utratę danych.
fedora24x
(fedora24x)
#10
testowałe, miałeś racje
i doszedłem do wniosku że to tak:
char znak = 8;
int cyfra = znak; (sizeof pasuje :) )
a jak w przypadku łancuchuch?
char text[] = "123123";
int duza_liczba = (int)text;
OMG,
string jest wskaźnikiem, zatem takie rzutowanie zwróci tylko jego adres w pamięci, musisz użyć funkcji atoi.
GioWDS
(GioWDS)
#12
Z tego co pamiętam atoi oraz itoa