/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Nybegynder: kopiering af arrays med forske~
Fra : Jens Gyldenkærne Cla~


Dato : 07-10-05 21:03

Hej gruppe.

Jeg er temmelig ny i C-verdenen, så dette er sikkert et basalt
spørgsmål.

En funktion skal videresende en værdi den modtager som et array.

Argumentet til funktionen har typen "struct msg" - hvor struct msg
er defineret som følger:

struct msg {
   char data[20]
}

msg skal nu bruges i en ny struct, men her er det pågældende felt
angivet som et char array - og ikke som et msg array.

Uanset om jeg prøver at overføre data med strcpy eller via en
pointer, får jeg en typekonverteringsfejl (enten "incompatible type
for argument 2 of `strcpy'" eller også "incompatible types in
assignment".

Som et skud i tågen har jeg prøvet følgende nu:

    strcpy(sendpkt.payload,&message);

- hvilket "kun" giver advarslen "warning: passing arg 2 of `strcpy'
from incompatible pointer type" - men jeg har på fornemmelsen at
advarslen betyder at jeg ikke får overført message til payload.

Er der nogen der kan hjælpe mig på rette vej?
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

 
 
Jens Gyldenkærne Cla~ (07-10-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-10-05 21:17

Jens Gyldenkærne Clausen skrev:

> strcpy(sendpkt.payload,&message);

Ah - så faldt tiøren:

strcpy(sendpkt.payload,message.data);

Jeg havde overset at indholdet i en struct findes som egenskaber
til struct-navnet.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (10-10-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 10-10-05 15:17

Jens Gyldenkærne Clausen skrev:

> Ah - så faldt tiøren:
>
> strcpy(sendpkt.payload,message.data);

- og så alligevel ikke. For da jeg flyttede koden fra mit
Windows2000/CygWin-miljø over på en linux-maskine, gav ovenstående
kode problemer.

Den kompilerer uden fejl, men når man kører den, giver det
segmentation-fejl. Jeg kan løse det ved at kopiere arrayet med en
for-løkke, men er der ikke en smartere måde at gøre det på?
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Igor V. Rafienko (10-10-2005)
Kommentar
Fra : Igor V. Rafienko


Dato : 10-10-05 16:32

[ Jens Gyldenkærne Clausen ]

[ ... ]

> > strcpy(sendpkt.payload,message.data);
:
> Den kompilerer uden fejl, men når man kører den, giver det
> segmentation-fejl. Jeg kan løse det ved at kopiere arrayet med en
> for-løkke, men er der ikke en smartere måde at gøre det på?


Hmm... hva bruker du som sluttbetingelse i forløkken og hva bruker
strcpy som sluttkriterium for det andre argumentet?





ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
       -- Fry, "When aliens attack"

Jens Gyldenkærne Cla~ (10-10-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 10-10-05 16:54

Igor V. Rafienko skrev:

> Hmm... hva bruker du som sluttbetingelse i forløkken

for (i=0;i<20;i++){
p.payload[i]=data[i];
}

(hvor data og p.payload har typen char[20]).

Det virker fint, men jeg ville bare tro at der var lettere metoder.

> og hva bruker strcpy som sluttkriterium for det andre argumentet?

strcpy tager bare to arrays som argument - og kopierer data fra det
sidste ind i det første.

Segmentationsfejlen skyldes måske et problem med manglende null-
terminering af inddata - se evt. sidste punkt i faq'en her:
<http://gaia.cs.umass.edu/kurose/transport/programming_assignment_QA.htm>

Jeg kan godt leve med at bruge en for-løkke til at flytte data, men
jeg vil gerne vide om der er en mere "rigtig" metode.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

J. Martin Petersen (10-10-2005)
Kommentar
Fra : J. Martin Petersen


Dato : 10-10-05 17:33

Jens Gyldenkærne Clausen wrote:
> Igor V. Rafienko skrev:
>
>
>>Hmm... hva bruker du som sluttbetingelse i forløkken
>
>
> for (i=0;i<20;i++){
> p.payload[i]=data[i];
> }
>
> (hvor data og p.payload har typen char[20]).
>
> Det virker fint, men jeg ville bare tro at der var lettere metoder.
>
>
>>og hva bruker strcpy som sluttkriterium for det andre argumentet?
>
>
> strcpy tager bare to arrays som argument - og kopierer data fra det
> sidste ind i det første.
>
> Segmentationsfejlen skyldes måske et problem med manglende null-
> terminering af inddata - se evt. sidste punkt i faq'en her:
> <http://gaia.cs.umass.edu/kurose/transport/programming_assignment_QA.htm>
>
> Jeg kan godt leve med at bruge en for-løkke til at flytte data, men
> jeg vil gerne vide om der er en mere "rigtig" metode.

Jeg ville nok hellere bruge memcpy() til at kopiere binære blobs,
strcpy() egner sig bedst, som navnet antyder, til strenge (altså
nulterminerede følger af tegn).

Hvad sker der f.eks. hvis en bit i data/payload, som ikke er den sidste,
er nul, og du bruger strcpy hhv. memcpy?

Mvh. Martin

Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407943
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste