Announcement

Collapse
No announcement yet.

strcpy_s nachbauen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • strcpy_s nachbauen

    Hallo,

    ich arbeite mit einem älteren C++ Compiler. Da mit diesem Compiler 14 MB Code geschrieben wurden und diese nicht so einfach auf einen neueren Compiler übertragen werden können, würde ich gerne den relativ neuen Befehl "strcpy_s" nachbauen. Dieser Befehl verhindert ja Abstürze, wenn ein zu langer Wert in den String kopiert wird.

    Soweit bin ich allein gekommen:

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    
    char string1[11];
    char string2[21];
    
    void strcpy_s (char* str_sec_1, char* str_sec_2);
    
    int main(void)
    {
       strcpy(string2, "12345678901234567890");
    
       clrscr();
    
       strcpy_s(string1, string2);
    
       gotoxy(10,13);
       printf("String1 nachher = %s\n", string1);
    
       getch();
    
       return 0;
    }
    
    void strcpy_s (char* str_sec_1, char* str_sec_2)
    {
    
       int laenge_str_sec_1;
       int x_sq;
    
       gotoxy(10,9);
       printf("Länge Variable string1 =%i", sizeof(string1) - 1); // richtig = 10
    
       gotoxy(10,10);
       printf("Länge Variable str_sec_1=%i", sizeof(str_sec_1) - 1); // leider falsch = 1 statt 10
    
       laenge_str_sec_1 = sizeof(str_sec_1) - 1;
    
       if ((strlen(str_sec_2)) > laenge_str_sec_1)
          {
           gotoxy(1,25);
           printf("Der String ist zu lang. Er wird abgeschnitten. Weiter nach Tastendruck!");
           getch();
           strncpy(str_sec_1, str_sec_2, laenge_str_sec_1);
           str_sec_1[laenge_str_sec_1] = '\0';
          }
    }
    Wie man sehen kann, schaffe ich es nicht, die Länge des Strings "str_sec_1" in der Unterfunktion "strcpy_s" zu ermitteln. Hat jemand eine Idee? Wäre wirklich großartig.

  • #2
    Warum benutzt du nicht strncpy?
    Habe keine C Compiler mehr, aber
    sizeof (&str_sec_1[0])
    könnte gehen
    Christian

    Comment


    • #3
      Hallo Christian,

      habe leider keine Emailbenachrichtigung bekommen. Daher habe ich es erst heute gesehen.

      Leider klappt es so nicht. Hast du noch eine andere Idee?

      Der Rückgabewert von sizeof (&str_sec_1[0]) - 1 ist immer noch 1 statt 10

      Viele Grüße

      Comment


      • #4
        sizeof (&str_sec_1[0]) liefert die Groesse des Elementes (&str_sec_1[0]). Da dies ein char ist ist die 1 richtig.
        Willst du die laenge des String so versuchs mit "strlen(str_sec_1)".

        Dein Problem loest du am besten wie von Christian vorgeschlagen mit:
        strncpy (string1, string2, sizeof(string1)-1);
        Zuletzt editiert von Manfred Pawelzik; 06.02.2014, 11:37.

        Comment


        • #5
          Hallo Manfred,

          danke für den Tipp!

          Das funktioniert ja sehr gut so. Es ist leider sehr aufwendig, alle Programme (14 MB Quellcode) anzupassen. Wenn "strcpy_s" funktionieren würde, dann wäre es wesentlich einfacher.

          Hoffentlich hat noch jemand eine Idee dazu.

          Vielen Dank bis hierher

          Comment


          • #6
            strlen dürfte nicht funktionieren, da str_sec_1 ja gar keinen Inhalt hat. Es soll ja die Größe des reservierten Speichers ermittelt werden
            Christian

            Comment


            • #7
              Hat noch jemand einen Vorschlag? Wäre wirklich klasse dafür eine Lösung zu finden!!!

              Comment

              Working...
              X