|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
VolkD Član
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 63.81 Kraj: Divača (Kačiče)
|
Objavljeno: Sob Dec 06, 2014 7:05 pm Naslov sporočila: Ne najdem,.... |
|
|
Kje se tu skriva napaka ?
Koda: |
char inpp[48];
char ip;
char ttt[8],www[8];
void append(char* s, char c) // doda char na konec stringa
{
int len = strlen(s);
s[len] = c;
s[len+1] = '\0';
}
char getparam(char* s)
{
char il;
char p;
// strcpy(s,"");
s[0]=0;
while ((inpp[ip]!=',') & (inpp[ip]!=0x00)) {
if (inpp[ip]!=' ') {
append(s,inpp[ip]);
il=strlen(s);
}
ip++;
}
p=0;
return il;
}
while (1)
{
if (bend==1) {
ip=0;
kdo=getparam(ttt);
bend=0;
for (it=0;it<=strlen(ttt);it++){
putchar(ttt[it]);
}
putchar('*');
itoa(kdo,www);
for (it=0;it<=strlen(www);it++){
putchar(www[it]);
}
}
}
}
|
Tole ni cel program, temveč le del. Preko interrupt rutine se napolni inpp in prižge vrednost bend na 1. To vse deluje.
Problem je delovanje getparam rutine, ki prvič vrne pravo vrednost, vsakič naslednjič pa vrednost preveliko za 1.
še izpis s terminalskega programa....
Koda: |
1,12
1[00]*1[00]
1,12
1[00]*2[00] |
_________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
|
danilo Član
Pridružen-a: Sre 20 Avg 2003 14:57 Prispevkov: 147 Aktiv.: 0.66 Kraj: Kamnik
|
Objavljeno: Sob Dec 06, 2014 8:53 pm Naslov sporočila: |
|
|
Mogoče je problem v funkciji append. Funkcija strlen vrne dolžino stringa brez end of string markerja. To pomeni, da moraš spremeniti funkijo append in sicer
s[++len] = c;
s[++len] = '\0';
Lahko pa je problem tudi kje drugje. To mi je padlo v oči.
lp Danilo
še opis c++ funkcije strlen:
strlen
size_t strlen ( const char * str );
Get string length
Returns the length of the C string str.
The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).
This should not be confused with the size of the array that holds the string. For example:
char mystr[100]="test string";
defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11.
In C++, char_traits::length implements the same behavior. |
|
Nazaj na vrh |
|
|
VolkD Član
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 63.81 Kraj: Divača (Kačiče)
|
Objavljeno: Sob Dec 06, 2014 10:00 pm Naslov sporočila: |
|
|
Vse zgoraj napisano deluje korektno. Problem je nastal v stringu, ki sem ga pošiljal v te funkcije. Ta se je, razen prvič,začel z 0x0a.
Se pa da to pogruntat tudi iz izpisa, ker normalno bi stvar ne smela biti v novi vrsti. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 75 dni
Powered by phpBB © 2001, 2005 phpBB Group
|