incompatible types in assignment

35 отговора 1085 прегледа
#1

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
Отговор
в отговор на Linux|G33K #2

Re: incompatible types in assignment

Shtoto toupper ne e za cyal niz, a samo za edin simvol.

Отговор
в отговор на Linux|G33K #3

Re: incompatible types in assignment

da ne spomenavame, che taka deklariran masiv ne e lvalue

Пламен
Отговор
в отговор на Linux|G33K #4

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

Отговор
в отговор на malkia #5

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 !

Отговор
в отговор на malkia #6

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...

Отговор
в отговор на Linux|G33K #7

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;

Редактирано от Aл Koxoнe на

Отговор
в отговор на emo #8

Re: greshka :)

Хехе Абе да завърти цикъл по символите в масива, това няма как да не свърши работа...

Отговор
в отговор на Linux|G33K #9

Леле, великите програмисти

как никой от вас не се сети, че името на масив е УКАЗАТЕЛ.
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 на

Отговор
в отговор на lndependent #10

Re: Леле, великите програмисти

aahm, she si setvame 25 puti nameNew[0]=toupper[name[0])? :)
mai she e po udachno nameNew=toupper[name);

Редактирано от Goose на

Отговор
в отговор на lndependent #11

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;
Отговор
в отговор на lndependent #12

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;

Отговор
в отговор на malkia #13

Re: incompatible types in assignment

Браво malkia, това е най-правилното решение в случая!

Като чета останалите постове сега разбирам защо още се предъвкват теми като "Паскал <-> С" в околните форуми - от явно неразбиране и на двата езика :))

Отговор
в отговор на linux #14

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;
Отговор
в отговор на emo #15

Re: greshka :)

Не си прав, байно:

1)
int __cdecl toupper(int) - погледни си в .Н файловете
Има и макрос,
#define _toupper(_c) ( (_c)-'a'+'A' )

2)
strupr() не е на Майкрософт, а е още от Керниган и Ричи - от създаването на езика.

Отговор
в отговор на Aл Koxoнe #16

Re: Леле, великите програмисти

ами хардкодни си дължината, щом е толкова трудно да се справяш със стрингове.

stoj, ta gledaj
Отговор
в отговор на Гeнчo #17

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;
Отговор
в отговор на linux #18

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;
Отговор
в отговор на Гeнчo #19

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 :)

Отговор
в отговор на lndependent #20

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;
Отговор