| | |
Problem with Character Arrays
![]() |
•
•
Join Date: Jul 2005
Posts: 3
Reputation:
Solved Threads: 0
I am not an expert C/C++ programmer, and am having a bit of a problem on a school assignment. The assignment is to build a text file based database. The program has to read a schema file containing information about the individual tables (table name, filename, data field name, type, and length). Then it must be able to read the data files and do operations on the tables.
A line from the schema file looks like this (it may wrap):
customer,customer.txt,customer_name,C,15,customer_street,C,15,customer_city,C,15:
A comma seperates the information and a colon terminates the line.
I created two structs that will hold the common data and also up to 10 sets of column data. The structs are shown below.
// Create a struct for the data elements
struct dataField
{
char fieldName[15];
char fieldType[1];
char fieldLen[2];
};
// Create class for a line describing one table schema limited to 10 data elements
struct schema
{
char tableName[15];
char fileName[15];
int fieldsUsed;
dataField data[10];
};
Without posting a large amount of code, I can get the text file read in and display the contents of the individual dataField element (such as fieldName) right after I load them. However, when I try to read the individual dataField.fieldName element any time after loading the next element, I get run together data like
customer_name C15customer_streetC15customer_city C15
Any ideas on why it doesn't seem to give me just the data I loaded? I am using a Microsoft VC++ environment to write a command line program.
Thanks.
A line from the schema file looks like this (it may wrap):
customer,customer.txt,customer_name,C,15,customer_street,C,15,customer_city,C,15:
A comma seperates the information and a colon terminates the line.
I created two structs that will hold the common data and also up to 10 sets of column data. The structs are shown below.
// Create a struct for the data elements
struct dataField
{
char fieldName[15];
char fieldType[1];
char fieldLen[2];
};
// Create class for a line describing one table schema limited to 10 data elements
struct schema
{
char tableName[15];
char fileName[15];
int fieldsUsed;
dataField data[10];
};
Without posting a large amount of code, I can get the text file read in and display the contents of the individual dataField element (such as fieldName) right after I load them. However, when I try to read the individual dataField.fieldName element any time after loading the next element, I get run together data like
customer_name C15customer_streetC15customer_city C15
Any ideas on why it doesn't seem to give me just the data I loaded? I am using a Microsoft VC++ environment to write a command line program.
Thanks.
•
•
Join Date: Jul 2005
Posts: 55
Reputation:
Solved Threads: 0
Why not post the code that you are using to read in and display. Also make sure you are copying over and not overwriting the null terminator at the end of your char arrays. If you want to just test to see if you are, try strcat-ing a '\0' to the end of your char or manually put it in the last spot using its index value of each array. My guess is null terminator problem, see it often with new programmers.
•
•
Join Date: Jul 2005
Posts: 3
Reputation:
Solved Threads: 0
Sorry guys - I didn't want to post more code than I needed. I really figured that I must be doing something wrong with the struct declarations that cause a read of one dataField element to overrun the 15 character length. Here is the snippet of code that reads in from the CSV and writes to the struct.
Struct definations:
Once everything is loaded, this code should recall the contents of the same element.
The incorrect display is shown as comments on the last cout lines. As I mentioned earlier, I think that during the retrieval of the date, my mechanism is overrunning what should be the bonds of the dataField struct, but I can't figure out why.
Thanks.
Struct definations:
C++ Syntax (Toggle Plain Text)
struct dataField { char fieldName[15]; char fieldType[1]; char fieldLen[2]; }; struct schema { char tableName[15]; char fileName[15]; int fieldsUsed; struct dataField data[10]; }; schema schemaArray[10]; for (forvar = 0;forvar < 15; forvar++) nextWord[forvar]=' '; // clears nextWord[15] character variable kk=0; // Resets nextWord counter ii++; // Skip past comma (delimiter) do { nextChar[1] = schemaLine[ii++];// Reads next character in schemaLine nextWord[kk++] = nextChar[1]; // Concats next character to the word } while (schemaLine[ii] != eOL && schemaLine[ii] != delim); // reads until eol or delimiter is reached cout << nextWord << endl;// This correctly shows the expected data read in strcpy (schemaArray[arrayLine].data[dataFieldNum].fieldName, nextWord);// loads data in schema array cout << schemaArray[arrayLine].data[dataFieldNum].fieldName << endl; // this correctly shows data as well
Once everything is loaded, this code should recall the contents of the same element.
C++ Syntax (Toggle Plain Text)
int fn=0,al=0; for (al=0;al<6;al++) { cout << schemaArray[al].tableName << " " << schemaArray[al].fileName << " " << schemaArray[al].fieldsUsed << " " << endl; // correctly displays table name and file name data from the schema struct for (fn=0; fn<3;fn++) { cout << schemaArray[al].data[fn].fieldName; // displays customer_name C15customer_streetC15customer_city C15 - should display customer_name cout << schemaArray[al].data[fn].fieldType; // displays C15customer_streetC15customer_city C15 - should display C cout << schemaArray[al].data[fn].fieldLen; //displays15customer_streetC15customer_city C15 - should display 15 } }
The incorrect display is shown as comments on the last cout lines. As I mentioned earlier, I think that during the retrieval of the date, my mechanism is overrunning what should be the bonds of the dataField struct, but I can't figure out why.
Thanks.
![]() |
Similar Threads
- Character Arrays (C++)
- Please help me with arrays (C++)
- Problem with a snippet of code in a shell program (C)
- Sorting character arrays! (C++)
Other Threads in the C++ Forum
- Previous Thread: How do I use an array of structures?
- Next Thread: external variables in a multifile program
| Thread Tools | Search this Thread |
api application array based binary bitmap c# c++ c/c++ char class classes code coding compile compression console conversion count cpm delete deploy desktop developer directshow dll download dynamic dynamiccharacterarray email encryption error file forms fstream function functions game givemetehcodez graph gui homeworkhelp homeworkhelper iamthwee ifstream input int integer introductory java lib linkedlist linkednodes linker loop looping loops map math matrix memory multiple news node number numbertoword output parameter pointer problem program programming project python random read recursion reference rpg security sorting string strings temperature template test text text-file tree url variable vector video whyisthiscodecausingsegmentationfault win32 windows winsock word wordfrequency wxwidgets





