Avatar billede gobbles Nybegynder
07. juni 2006 - 18:39 Der er 19 kommentarer og
1 løsning

Array til streng funktion i C

Hej

I div. andre programmeringssprog jeg har brugt er der som regel en
funktion der lægger et array "over" i en streng.
noget lignende:

char *string
char Array[2]={'h','e','j'}

string = Array;

printf("%c", string)

//udskriver "hej"

Jeg har ikke lige kunne finde denne funktion i C da den jo opfatter strenge lidt anderledes...

Nogen der kan hjælpe mig med den "rigtige" måde at komme rundt omkring dette :)

Tak
Avatar billede mxs Nybegynder
07. juni 2006 - 19:08 #1
Altså det du vil er at kopierer en char* til en C++ string?
Avatar billede mxs Nybegynder
07. juni 2006 - 19:14 #2
Aaah okay. Du vil have char* string til at pege på dit array?
Avatar billede gobbles Nybegynder
07. juni 2006 - 19:16 #3
nej... jeg har et array[x]={'x','x','x'}  er der mulighed for at få det lagt over i en "streng", der er jo ikke strenge i C, men kun "char arrays" .. normalt opgivet som en *pointer til den første char...
Avatar billede mxs Nybegynder
07. juni 2006 - 19:19 #4
Ok så skal du jo smide den over i en string som er at finde under C++.
Avatar billede gobbles Nybegynder
07. juni 2006 - 19:21 #5
jep :) så taler vi vist om det samme..
Avatar billede mxs Nybegynder
07. juni 2006 - 19:27 #6
Altså jeg har lavet denne funktion

#include <iostream>
using namespace std;


string atos(char a[])
{

  string s;
  for(int i = 0; i <= sizeof(a); i++)
    s.push_back(a[i]);

  return s;


}


int main()
{

  char a[3] = {'h','e','j'};
  string ss = atos(a);
  cout << ss << endl;


}
Avatar billede mxs Nybegynder
07. juni 2006 - 19:28 #7
Ved ikke lige om der er nogen sikkerhedshuller i den.
Avatar billede gobbles Nybegynder
07. juni 2006 - 19:29 #8
C++ som i programmeringssproget C++? ..... det bliver min uC nok ked af, da den kun kører C ...
Avatar billede mxs Nybegynder
07. juni 2006 - 19:30 #9
Altså der findes jo ikke strenge i C. Der bruger man char*.
Avatar billede mxs Nybegynder
07. juni 2006 - 19:32 #10
Okay. Jeg har misforstået dig. Undskyld. du har et array, og en char*. du vil nu smide alle karakterer fra arrayet over i dette char*. Ik?
Avatar billede gobbles Nybegynder
07. juni 2006 - 19:34 #11
jo, jeg mente "string" som i en variable .. ikke "string" som i en c++ type
Avatar billede mxs Nybegynder
07. juni 2006 - 19:39 #12
char a[] = "hej";
  cout << a <<endl;

udskriver hej.
Avatar billede gobbles Nybegynder
07. juni 2006 - 20:01 #13
Så er vi der næsten :)

char a[2] = {'h','e','j'}  skal laves til char a[] = "hej";
Avatar billede nlf Nybegynder
08. juni 2006 - 00:09 #14
Skriver det lige korrekt ;)
char a[3] = {'h','e','j'}  skal laves til char a[] = "hej";

Men du bliver nødt til at gøre således, hvis du vil gøre det nemt:
char a[4] = {'h', 'e', 'j', 0};

Så kan du bare typecaste, hvis du vil bruge den som en streng:
(char *)a

Hvis du giver a[3] (altså uden 0-byte), skal du jo lige have tilføjet dette.
Men da du ikke kan ændre størrelsen af et array allokeret på stakken, bliver du nødt til at lave det dynamisk:

char *atos(char *array, int size)
{
char *a = (char *)malloc(size + 1);

memcpy(a, array, size);
a[size] = 0;
return a;
}

Grunden til, at du skal opgive længden, er, at man ikke kan finde størrelsen af dynamiske array's, kun array's på stakken (statiske).
Hvis du vil have et statisk array til tekst, kan du godt benytte sizeof():
char a[3] = {'h','e','j'}
char *b = atos(a, sizeof(a));

Ellers skal du selv holde styr på det:
char *a = malloc(3);
a[0] = 'h';
a[1] = 'e';
a[2] = 'j';

char *b = atos(a, 3);

Egentlig har du jo en tekststreng, hvis du har et array af char's, der skal bare tilføjes en 0-byte, hvis ikke den allerede findes i array'et, således at man kan finde slutningen på tekststrengen.
Avatar billede nlf Nybegynder
08. juni 2006 - 00:11 #15
Glemte lige at tilføje, at array's allokeret dynamisk også skal frigøres (det her er jo ikke ligefrem .NET :P), hvilket foregår via free():
free(a);
Avatar billede gobbles Nybegynder
08. juni 2006 - 13:01 #16
Hej nlf

Jeg fandt ud af det i går aftes :)

Løsningen var lige præcis at skrive char a[3] = {'h','e','j','\0'} altså med NULL på sidste plads, det giver mig mulighed for at benytte alle funktioner i string.h.

Så tak for dit svar :)
Avatar billede tokelil Nybegynder
08. juni 2006 - 13:41 #17
Størrelsen på dit array er stadig 4 og ikke 3 som du skriver...
a[4] = {'h','e','j','\0'};
Avatar billede gobbles Nybegynder
08. juni 2006 - 13:46 #18
nej det er jo klart... (jeg copy-pastede) ;)
Avatar billede nlf Nybegynder
08. juni 2006 - 15:20 #19
Hmm, så bør jeg da også lige lægge et svar :P
Avatar billede gobbles Nybegynder
09. juni 2006 - 00:24 #20
Så smider jeg lige nogle point og en tak til mxs for gåpåmod :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester