webForumDet fria alternativet

char + char

7 svar · 366 visningar · startad av roj

rojMedlem sedan apr. 2002179 inlägg
#1

Kan man och i sådant fall hur gör man för att lägga ihop två char med varandra..

Går det om dom är olika stora?
Går det att byta vissa tecken.?
Med mera!

PeWMedlem sedan juni 20006 839 inlägg
#2

Vad är det du vill göra? En char är en s.k primitiv datatyp. Det betyder att om du skriver

char a = 'A' ;
char b = 1; 
char c;

c = a+b;

... så blir c vid en formaterad utskrift "B", men den kommer att ha värdet 66 ('A' har värdet 65).

Om du däremot vill lägga ihop två tecken till ett "ord" blir det ett måste att allokera en array av storleken 2 och tilldela respektive char variabel på ett eget index.

rojMedlem sedan apr. 2002179 inlägg
#3

Men om manvill arbeta med sträng hantering vad är det enklaste..? Om man nu inte kan använda CString, som jag är van vid.. Jag vill kunna lägga ihop strängar flyta strängar till en char osv.

PeWMedlem sedan juni 20006 839 inlägg
#4

Är det bara en begränsning i att du inte kan använda CString så finns ju string.h att använda. Annars kan du enkelt göra en egen funktion som gör detta.

Hastigt exempel:

void stringAppend(char *s1,char *s2, char *s3)
{
   while(*(s1++))
      *s3++=*s1;
   while(*(s2 ++))
      *s3++=*s2;
}

S1 kopieras till s3, s2 kopieras in efter s1 i s3. S3 är den nya strängen.

Men ivf måste du allokera utrymme för din nya sträng - statiskt eller dynamiskt.

Btw:
En sträng är inte en char!
Däremot består en sträng av flera chars och man kan tilldela en charpekare adressen till en sträng med chars. En sträng avslutas alltid med nulltecken.

BeatboxMedlem sedan okt. 20012 496 inlägg
#5

Borde man inte kolla så att längden på s1+s2 är like eller mindre det allokerade utrymmet för s3 ?

PeWMedlem sedan juni 20006 839 inlägg
#6

Jovisst. Det var bara ett exempel som kräver att man allokerat storleken på s3 till s1+s2 's storlekar. Tanken var inte att ge en färdig lösning, utan peka på att det inte alltid är så svårt att knopa ihop sånt som standardlibben erbjuder. ;)

rojMedlem sedan apr. 2002179 inlägg
#7

Om jag skriver så här..

char text[256];

text = 'MinText';

Nu vet jag ju att tex text[0] inehåller ett 'M'.. Men hur kollar jag det och låt säga att jag vill byta T mot ett N kan jag bara göra så här då?

text[3] = 'N';

Får inte till det riktigt..

I tidigare inlägg så talade Pew om att lägga in en check summa i min text jag skickade till porten och iom att jag skickar en char (eller flera chars) hur gör jag då för att flytta fram alla tecken några steg och lägga in min checksumma?

PeWMedlem sedan juni 20006 839 inlägg
#8

roj skrev:

I tidigare inlägg så talade Pew om att lägga in en check summa i min text jag skickade till porten och iom att jag skickar en char (eller flera chars) hur gör jag då för att flytta fram alla tecken några steg och lägga in min checksumma?

Typ så här:

unsigned char buffToSend[255],*pek;  
unsigned char len;

pek = data_som_ska_skickas;  //får inte vara längre än 254 byte

for(len=0;len<data_length;len++)
    bufferToSend[len+1]=*(pek++);

bufferToSend[0]=len;

Vilket förutsätter att du vet hur många byten data som ska skickas. Är det strängar så terminerar dessa vid nulltecknet så då kan du ta reda på längden direkt:

unsigned char buffToSend[255],*pek;  
unsigned char len;

pek = data_som_ska_skickas;  //får inte vara längre än 254 byte

for(len=0;*pek;len++)
    bufferToSend[len+1]=*(pek++);

bufferToSend[0]=len;

Fortfarande så ligger det ett ansvar hos dig att se till att datalängden inte överstiger den allokerade bufferten - 1.

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb