Avatar billede allanj Nybegynder
12. februar 2003 - 13:56 Der er 11 kommentarer og
2 løsninger

strcat: chars over i string (i C)

Hej alle!

Hvorfor kan nedenstående ikke lade sig gøre? Hvordan kan man ellers løse nedenstående?

char temp;
char string[20];

temp = 't';
strcpy(string, "slu");

strcat(string, temp);
printf("%s\n", string);


Mvh. Allan

PS: Hvor mange af de der points er sådan et spørgsmål her værd?
Avatar billede arne_v Ekspert
12. februar 2003 - 14:01 #1
strcpy opererer på strenge ikke på chars.
Avatar billede jpk Nybegynder
12. februar 2003 - 14:01 #2
Et simpelt eksempel

#include <string.h>
#include <stdio.h>

void main( void )
{
  char string[80];
  strcpy( string, "Hello world from " );
  strcat( string, "strcpy " );
  strcat( string, "and " );
  strcat( string, "strcat!" );
  printf( "String = %s\n", string );
}
Avatar billede allanj Nybegynder
12. februar 2003 - 14:16 #3
Okay, strcpy opererer ikke på strenge (siger vel egentlig også sig selv:), men findes der så ikke en anden måde hvorpå man kan samle flere karakter til en streng?
Avatar billede allanj Nybegynder
12. februar 2003 - 14:17 #4
Sorry, mente selvf. også strcat...
Avatar billede olennert Nybegynder
12. februar 2003 - 14:23 #5
Hvad med strncat:

strcpy(string, "slu");
strncat(string, &temp, 1);
printf("%s\n", string);
Avatar billede segmose Nybegynder
12. februar 2003 - 14:32 #6
char temp;
char string[20];
char *buffer, = "slu");

temp = 't';

/* check at det reelt kan være der */
assert(strlen(buffer) < sizeof(string)-1);

/*
  Advarsel, check altid at dine data kan være i target
  eller du risikere at lave en "buffer overflow vulnerability,
  her er også et post check, hvor det måske allerede er for sent.
*/
assert(sprintf(string, "%s%c", buffer, temp) < sizeof(string);
printf("%s\n", string);
Avatar billede segmose Nybegynder
12. februar 2003 - 14:33 #7
char *buffer, = "slu");

skulle være

char *buffer = "slu";
Avatar billede arne_v Ekspert
12. februar 2003 - 15:30 #8
For at lave den konkatanering kan du bruge enten:

char temp[2];
char string[20];
strcpy(temp,"t");
strcpy(string, "slu");
strcat(string, temp);
printf("%s\n", string);

eller:

char temp;
char string[20];
int l;
temp = 't';
strcpy(string, "slu");
l = strlen(string);
string[l] = temp;
string[l+1] = '\0';
printf("%s\n", string);
Avatar billede olennert Nybegynder
12. februar 2003 - 16:06 #9
There is more than one way to skin a cat.

Way #22: Use an electric sander

:-)
Avatar billede hsloth Novice
12. februar 2003 - 16:58 #10
Hvis man skal tilføje enkelt tegn til en char buffer kan man gøre det ved simple assignments :

char temp;
char string[20];
int len;

temp = 't';
strcpy(string, "slu");
len = strlen(string);
string[len] = temp;
string[len+1] = '\0';
printf("%s\n", string);
Avatar billede hsloth Novice
12. februar 2003 - 16:59 #11
Sorry - min løsning er helt identisk med arne_v's løsning 2.

Jeg havde ikke lige fået læst det hele.
Avatar billede arne_v Ekspert
12. februar 2003 - 17:03 #12
Det er jo også en ret naturlig måde at gøre det på.
Avatar billede allanj Nybegynder
12. februar 2003 - 17:23 #13
Tak for alle svarne... hvordan deler man de point ud???
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