incompatible types in assignment
35 отговора
1085 прегледа
incompatible types in assignment
zashto compilatora mi pishe che ima incompatible types in assignment v " nameNew = toupper(name); "
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<string.h>
main()
{
char name[25], nameNew[25];
printf ("What is your name? ");
gets(name);
nameNew = toupper(name);
printf ("Your name in uppercase letters s %s.\n", nameNew);
return 0;
}
- null
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<string.h>
main()
{
char name[25], nameNew[25];
printf ("What is your name? ");
gets(name);
nameNew = toupper(name);
printf ("Your name in uppercase letters s %s.\n", nameNew);
return 0;
}
- null
Re: incompatible types in assignment
Shtoto toupper ne e za cyal niz, a samo za edin simvol.
Re: incompatible types in assignment
da ne spomenavame, che taka deklariran masiv ne e lvalue
Пламен
Пламен
Re: incompatible types in assignment
int toupper(int c);
she reche che toupper shte tretira name kato name[0]
ili shte wzeme purwia simwol ot name[0] i shte go upper-casira
i shte go vurne - ama kude - ne mozhe da go wurne kum masiva
izpolzwai po dobre tova
strcpy( newName, name );
strupr( newName );
ili ako ne ti puka za staroto ime napravo strupr( name ); i posle nego izpolzwaj
she reche che toupper shte tretira name kato name[0]
ili shte wzeme purwia simwol ot name[0] i shte go upper-casira
i shte go vurne - ama kude - ne mozhe da go wurne kum masiva
izpolzwai po dobre tova
strcpy( newName, name );
strupr( newName );
ili ako ne ti puka za staroto ime napravo strupr( name ); i posle nego izpolzwaj
Re: incompatible types in assignment
A nai-dobre izpolzvai strncpy, zashtoto taka kakto si go napisal, shte imash mnogo jak (i prost) stack buffer overrun. Sytvetno ako/kato njakoi zamaje ret_addr v steka s neshto, koeto toi iska - "opa, bacame shte what she became"
Vyobshte - syvet kym vsichki - zabravete za familijata "strcpy" funkcii - polzvaite si "strncpy" familijata
I posle samo Microsoft pisheli unsecure kod - aide holan :-)))
Po-zdravi !
Vyobshte - syvet kym vsichki - zabravete za familijata "strcpy" funkcii - polzvaite si "strncpy" familijata
I posle samo Microsoft pisheli unsecure kod - aide holan :-)))
Po-zdravi !
greshka :)
imash greshka :)
1.
toupper(name) e syshtoto kato touuper( &name[0] )
2.
strupr e microsoft-ska ako ne se lyja
a awtora na temata se e pisal linux geek ako dobre si spomniam...
1.
toupper(name) e syshtoto kato touuper( &name[0] )
2.
strupr e microsoft-ska ako ne se lyja
a awtora na temata se e pisal linux geek ako dobre si spomniam...
Re: incompatible types in assignment
za da raboti navsqkade
for(j = 0; j < 25; j++) //moje i i < strlen(name) ama ako nqma \0 she stane losho
nameNew[j] = toupper(name[j]);
IF JADEN THEN
GOTO BIRARIA;
for(j = 0; j < 25; j++) //moje i i < strlen(name) ama ako nqma \0 she stane losho
nameNew[j] = toupper(name[j]);
IF JADEN THEN
GOTO BIRARIA;
Редактирано от Aл Koxoнe на
Re: greshka :)
Хехе
Абе да завърти цикъл по символите в масива, това няма как да не свърши работа...
Леле, великите програмисти
как никой от вас не се сети, че името на масив е УКАЗАТЕЛ.
toupper връща int, а не char *. най-доброто решение:
int count = strlen(name);
for (int j = 0; j < count; j++)
{
nameNew[j] = toupper(name[j]);
}
nameNew[count] = '\0';
ако някой още има желание да плюе по мен, да заповяда.
ако не ви е известно, i в [] се интерпретира като мета-символ за италик.
и това отново от "велики", "безпогрешни" и т.н. за да си програмист ти трябва и малко досетливост, а на вас такава ви липсва.
stoj, ta gledaj
toupper връща int, а не char *. най-доброто решение:
int count = strlen(name);
for (int j = 0; j < count; j++)
{
nameNew[j] = toupper(name[j]);
}
nameNew[count] = '\0';
ако някой още има желание да плюе по мен, да заповяда.
ако не ви е известно, i в [] се интерпретира като мета-символ за италик.
stoj, ta gledaj
Редактирано от lndependent на
Re: Леле, великите програмисти
aahm, she si setvame 25 puti nameNew[0]=toupper[name[0])? :)
mai she e po udachno nameNew=toupper[name);
mai she e po udachno nameNew=toupper[name);
Редактирано от Goose на
Re: Леле, великите програмисти
brovo be velikiq!!!! 

taka she poluchi edna glavna bukva + 23 bokluk :))) a kvo she stane ako name ne inicializiran pravilno i nqma '\0'? STOI TA GLEDAI ili S#&$&#!($*@%!
IF JADEN THEN
GOTO BIRARIA;
taka she poluchi edna glavna bukva + 23 bokluk :))) a kvo she stane ako name ne inicializiran pravilno i nqma '\0'? STOI TA GLEDAI ili S#&$&#!($*@%!
IF JADEN THEN
GOTO BIRARIA;
Re: Леле, великите програмисти
ne mu se smejte na independent-a - velikite win programisti trudno se opraviat s takiva prosti zada4i, ako niama niakoja podhodiashta API funcia :))
naj uda4no e da stane:
for(;name;name++)
*(newName++)=toupper(*name);
newName=name;
naj uda4no e da stane:
for(;name;name++)
*(newName++)=toupper(*name);
newName=name;
Re: incompatible types in assignment
Браво malkia, това е най-правилното решение в случая!
Като чета останалите постове сега разбирам защо още се предъвкват теми като "Паскал <-> С" в околните форуми - от явно неразбиране и на двата езика :))
Като чета останалите постове сега разбирам защо още се предъвкват теми като "Паскал <-> С" в околните форуми - от явно неразбиране и на двата езика :))
Re: Леле, великите програмисти
ako bqha char* da ama sa char[] ne moje da gi mestish. pyk i da bqha pointeri shteshe da si zatriesh name i posle nqma kak da go free-nesh.
IF JADEN THEN
GOTO BIRARIA;
IF JADEN THEN
GOTO BIRARIA;
Re: greshka :)
Не си прав, байно:
1)
int __cdecl toupper(int) - погледни си в .Н файловете
Има и макрос,
#define _toupper(_c) ( (_c)-'a'+'A' )
2)
strupr() не е на Майкрософт, а е още от Керниган и Ричи - от създаването на езика.
1)
int __cdecl toupper(int) - погледни си в .Н файловете
Има и макрос,
#define _toupper(_c) ( (_c)-'a'+'A' )
2)
strupr() не е на Майкрософт, а е още от Керниган и Ричи - от създаването на езика.
Re: Леле, великите програмисти
ами хардкодни си дължината, щом е толкова трудно да се справяш със стрингове.
stoj, ta gledaj
stoj, ta gledaj
Re: greshka :)
obache strupr za syjalenie ne e nito ANSI nito POSIX i q nqma navsqkyde (napriner NetBSB, mislq che i pri drugite BSD-ta). mai v linux-ite q ima, no ne e zadyljitelno.
IF JADEN THEN
GOTO BIRARIA;
IF JADEN THEN
GOTO BIRARIA;
Re: Леле, великите програмисти
pyk i vyv for-a trqbva de e
for(;*name;name++) shot inache she vzeme adresa na name a ne '\0' i she maje do...
mejdu drugoto ako nqkoi se interesuva eto koda na strupr:
char *strupr(char *string)
{
char *s;
if (string)
{
for (s = string; *s; ++s)
*s = toupper(*s);
}
return string;
}
IF JADEN THEN
GOTO BIRARIA;
for(;*name;name++) shot inache she vzeme adresa na name a ne '\0' i she maje do...
mejdu drugoto ako nqkoi se interesuva eto koda na strupr:
char *strupr(char *string)
{
char *s;
if (string)
{
for (s = string; *s; ++s)
*s = toupper(*s);
}
return string;
}
IF JADEN THEN
GOTO BIRARIA;
Re: greshka :)
ontosno toupper :)
ami az samo poiasniawam gresnoto razbirane na
toupper(name) che ne e kato toupper(name[0])
ne sym wzimal nikakwo otnoshenie kym towa
makros li e funkcia li e i kak e definirano i t.n.
a z strupr shte se syglasia... ne sym proslediawal genealogiata
i no znam che w VC++ ia ima a w gnu c++ koeto idwa s mandrake 8.1
(pone towa mislia che sykwartiranta mi si e slojil :) ) ia niama :)
ami az samo poiasniawam gresnoto razbirane na
toupper(name) che ne e kato toupper(name[0])
ne sym wzimal nikakwo otnoshenie kym towa
makros li e funkcia li e i kak e definirano i t.n.
a z strupr shte se syglasia... ne sym proslediawal genealogiata
i no znam che w VC++ ia ima a w gnu c++ koeto idwa s mandrake 8.1
(pone towa mislia che sykwartiranta mi si e slojil :) ) ia niama :)
Re: Леле, великите програмисти
tova s redaktiraneto na gornoto mnenie beshe mrysno...
a kolkoto do stringovete... az pisha za embbadet usroistva i v OS-a nqma zashtita na pametta ta za tova sym malko chustvitelen na taq tema. inache moje bi neshto ot sorta
count = strlen(name);
if (count > 25) count = 25;
za i-tata izvinqvai to i s moito taka se e sluchilo :((( mnogo e typo osobenno v grupa za programisti
IF JADEN THEN
GOTO BIRARIA;
a kolkoto do stringovete... az pisha za embbadet usroistva i v OS-a nqma zashtita na pametta ta za tova sym malko chustvitelen na taq tema. inache moje bi neshto ot sorta
count = strlen(name);
if (count > 25) count = 25;
za i-tata izvinqvai to i s moito taka se e sluchilo :((( mnogo e typo osobenno v grupa za programisti
IF JADEN THEN
GOTO BIRARIA;