c - String print out differently in Visual Studio and gcc -
i have created simple project using visual studio 2012, , code compiled successfully, ran, , printed out expected (the fruit name is: apple). when try compile same code gcc, print out looks different (the fruit name is: apple'). ' come from? below code:
#define _crt_secure_no_warnings #include <stdio.h> #include <string.h> #include <stdlib.h> char * getcharvalue(char line[]){ char *pch = strchr(line, '='); //find equal sign in line char *pch1 = strchr(line, '\0'); // find index of end of line char *info = (char *) malloc(sizeof(char) * (pch1-pch-4)); info[pch1-pch-5] = '\0'; // copy value new array return new char; memcpy(info, &line[pch-line+3], pch1-pch-5); return info; } int main() { char namefilename[] = "name.txt"; //register file name; char *namevalue; file *fid = fopen(namefilename, "r"); if (fid != null){ char line[150]; while(fgets(line, sizeof(line), fid) != null){ //if line not empty or comment line if ((strncmp(line, "//", 2) != 0) && (line[0] != '\n')) { if (strstr(line, "fruit_name") != null){ namevalue = getcharvalue(line); printf("the fruit name is: %s\n", namevalue); } } } } else{ printf("can not find input file."); exit(-1); } fclose(fid); return 0; }
the text file contains 1 line as:
fruit_name = 'apple'
is there wrong code? how come works visual studio no problem cannot produce right result using gcc?
you have delimited '
never check them, , never check badly formatted file. here revision. note don't cast malloc()
, don't use sizeof(char)
.
#include <stdio.h> #include <string.h> #include <stdlib.h> char * getcharvalue(char line[]){ char *pch, *pch1, *pch2, *info; int len; pch = strchr(line, '='); // find equal sign in line if (pch == null) return null; pch1 = strchr(pch+1, '\''); // find following quote mark if (pch1 == null) return null; pch2 = strchr(pch1+1, '\''); // find following quote mark if (pch2 == null) return null; // copy value new array return new char; len = pch2 - pch1 - 1; if (len <= 0) return null; info = malloc(len+1); memcpy(info, pch1+1, len); info[len] = '\0'; return info; } int main() { char namefilename[] = "name.txt"; //register file name; char *namevalue = null; //default file *fid = fopen(namefilename, "r"); if (fid != null){ char line[150]; while(fgets(line, sizeof(line), fid) != null){ //if line not empty or comment line if ((strncmp(line, "//", 2) != 0) && (line[0] != '\n')) { if (strstr(line, "fruit_name") != null){ namevalue = getcharvalue(line); if (namevalue == null) printf("the file badly formatted\n"); else printf("the fruit name is: %s\n", namevalue); } } } } else{ printf("can not find input file."); exit(-1); } fclose(fid); free(namevalue); // won't matter if null return 0; }
program output
the fruit name is: apple
Comments
Post a Comment