Avatar billede tbm_iceman Nybegynder
14. maj 2003 - 07:23 Der er 8 kommentarer og
1 løsning

Underlige tegn i char*

Hejsa. Jeg har lavet et lille sjovt program der kan skifte alfabetet ud, altså.
GammelStreng = "ABCD";
NyStreng = "NODU";

Mit problem er at når funktionen er kørt igennem tilføjer det nogle underlige tegn til den nyestreng, noget ala dem her "ï§0░B" så det bliver til: "NODUï§0░B".
Mit spørgsmål, hvad er der galt?

Koden er her:
--------------------------
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>

const char *org_alpha = "ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz";
const char *enc_alpha = "NODUBCKLMXYEFGVJZHIPAQRSTejkvczflngupmyibdaqrstoxh";

const char *test = "ABCD";

char replace(char whatletter)
{
    int i, alpha_pos, alpha_length;
    char newletter;
   
    alpha_length = strlen(org_alpha);
   
    for(i=0;i<alpha_length;i++)
    {
        if (org_alpha[i]==whatletter)
        {
            newletter = enc_alpha[i];
            return (newletter);
              break;
           
          }
    }
    if (i>=alpha_length)
    {
        return (whatletter);
      }
}


main()
{
    int i, linelength;

    linelength = (strlen(test)-1);
    char *output;

    for(i=0;i<=linelength;i++)
    {
        //output[i] = replace(test[i]);
        cout<<"\n"<<replace(test[i]);
        getch();
      }
   
      cout<<output;
    getch();
    return 0;
}
Avatar billede a_eriksen Nybegynder
14. maj 2003 - 07:44 #1
Du mangler nok en \0 i slutningen af din streng for at indikere overfor f.eks strlen() at strengen er slut.
Avatar billede arne_v Ekspert
14. maj 2003 - 07:51 #2
Du udskriver den streng som en unitialiseret pointer peger på.

char *output; // peger på noget tilfældigt memeory

//output[i] = replace(test[i]); // er er udkommenteret d.v.s. bliver ikke udført

cout<<output; // her udskrives den
Avatar billede arne_v Ekspert
14. maj 2003 - 07:54 #3
Hvis du vil have den kode genaktiveret så skal du:
  - allokere memory
  - nul terminere som a_eriksen foreslår

Eksempel:

main()
{
    int i, linelength;

    linelength = (strlen(test)-1);
    char *output = new char[linelength+2];

    for(i=0;i<=linelength;i++)
    {
        output[i] = replace(test[i]);
        //cout<<"\n"<<replace(test[i]);
        //getch();
      }
    output[linelength+1]='\0';
    cout<<output;
    //getch();
    return 0;
}
Avatar billede a_eriksen Nybegynder
14. maj 2003 - 07:54 #4
arne_v: Hmm.. Det er for sjællent jeg coder C til at jeg kan huske underlige måder at lave strenge på, men det lader da til at virke idet de første tegn af hans streng bliver rigtige.
Avatar billede tbm_iceman Nybegynder
14. maj 2003 - 08:04 #5
>>arne_v
Det er fordi jeg har siddet og rodet med det, så jeg sad og udkommenteret de linier, og det er stadig ligemeget hvad jeg gør så kommer det i slutningen af linien. Hvis jeg sætter '0' ind så kommer den bare på lige før tegnene.

den 4 sidste linie (cout<<output;) er udkommenteret i det program som jeg sidder med her.
Avatar billede chries Nybegynder
14. maj 2003 - 09:30 #6
det her ser ud til at virke

#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>

const char *org_alpha = "ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz";
const char *enc_alpha = "NODUBCKLMXYEFGVJZHIPAQRSTejkvczflngupmyibdaqrstoxh";

const char *test = "ABCD";

char replace(char whatletter)
{
    int i, alpha_pos, alpha_length;
    char newletter;
   
    alpha_length = strlen(org_alpha);
   
    for(i=0;i<alpha_length;i++)
    {
        if (org_alpha[i]==whatletter)
        {
            newletter = enc_alpha[i];
            return (newletter);
        }
    }

    return (whatletter);
}


int main()
{
    int i, linelength;

    linelength = (strlen(test));
 
    char *output;

    for(i=0;i<linelength;i++)
    {
        //output[i] = replace(test[i]);
        cout<<replace(test[i])<<endl;
    }
   
    getch();
    return 0;
}
Avatar billede chries Nybegynder
14. maj 2003 - 09:33 #7
ach, med mindre det var output var'en du ville have til at virke :)
Avatar billede tbm_iceman Nybegynder
24. maj 2003 - 13:35 #8
Problemet lå i en af mine include filer. Jeg fik en programør til at tjekke det og han sagde at der var intet galt med koden.
Så han sendte mig sine include filer og så virkede det perfekt.
Avatar billede arne_v Ekspert
24. maj 2003 - 14:15 #9
Hvis den pågældende programmør er blevet forevist det kode
du postede i spørgsmålet og siger at det er OK, så tror jeg han/hun
skal overveje at skifte erhverv.

Koden er ikke korrekt. Der bliver udskrevet noget som en
unitialiseret pointer peger på.
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