Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   In code C, How can I erase special characters from a char array? (http://www.go4expert.com/forums/code-c-i-erase-special-characters-char-t7321/)

3nc31 16Nov2007 09:40

In code C, How can I erase special characters from a char array?
 
I have this code:
Code:

int readConfig(char *IP, int *p, char Myfile[]){
char dir[32];
char pto[32];
char c='a';
FILE *fp;
int i=0;

if((fp=fopen(Myfile,"r"))==NULL){
return -1;
}
while(c!=EOF && c!='\n'){
c=getc(fp);
if(c!=EOF && c!='\n'){
dir[i++]=c;

}
}

i=0;
c='a';

while(c!=EOF && c!='\n'){
c=getc(fp);
if(c!=EOF && c!='\n'){
pto[i++]=c;
}
}

*puerto=atoi(pto);
strcpy(IP, dir);
return 0;
}

and the file contains this information: 255.255.255.255
5555

Well, when I print the IP value, this is the result
IP: 255.255.255.255fhv���

How can I do for fix it??? I want that only print: IP: 255.255.255.255

Thanks!!!!

shabbir 16Nov2007 10:16

Re: In code C, How can I erase special characters from a char array?
 
Because your 5555 is converted into ASCII as that character.

Salem 16Nov2007 15:54

Re: In code C, How can I erase special characters from a char array?
 
> Well, when I print the IP value, this is the result
> IP: 255.255.255.255fhv���
You don't append a \0 to the string you build up, so you get a random amount of trailing junk until the print function just happens to find a \0.

Also, your c variable should be an int if you want to compare it with EOF properly.
Consider this loop a simplification (and safer).
Code:

int c;
while ( i < 31 && (c=getc(fp)) != EOF && c != '\n' ) {
  dir[i++]=c;
}
dir[i] = '\0';

But this very near to what fgets() does for you anyway, so perhaps consider using that to read a line rather than inventing it yourself one character at a time.


All times are GMT +5.5. The time now is 14:06.