User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 401,693 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,737 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Views: 1832 | Replies: 5
Reply
Join Date: Jul 2005
Posts: 3
Reputation: lyndonp is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
lyndonp lyndonp is offline Offline
Newbie Poster

Problem with Character Arrays

  #1  
Jul 24th, 2005
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.
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Feb 2005
Posts: 461
Reputation: winbatch is on a distinguished road 
Rep Power: 4
Solved Threads: 18
winbatch's Avatar
winbatch winbatch is offline Offline
Posting Pro in Training

Re: Problem with Character Arrays

  #2  
Jul 24th, 2005
How are you printing out the columns? If you are using any functions that assume they are null terminated and you are not terminating them then you will get strange behavior...
Reply With Quote  
Join Date: Jul 2005
Posts: 56
Reputation: Sauce is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
Sauce Sauce is offline Offline
Junior Poster in Training

Re: Problem with Character Arrays

  #3  
Jul 24th, 2005
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.
Reply With Quote  
Join Date: Jul 2005
Posts: 3
Reputation: lyndonp is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
lyndonp lyndonp is offline Offline
Newbie Poster

Re: Problem with Character Arrays

  #4  
Jul 25th, 2005
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:

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.

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.
Reply With Quote  
Join Date: Feb 2005
Posts: 461
Reputation: winbatch is on a distinguished road 
Rep Power: 4
Solved Threads: 18
winbatch's Avatar
winbatch winbatch is offline Offline
Posting Pro in Training

Re: Problem with Character Arrays

  #5  
Jul 25th, 2005
You can't print it out like that...cout looks for the null terminator.


If you want, increase the length of each member of the struct, then put a '\0' in the last character, then print it out.
Reply With Quote  
Join Date: Jul 2005
Posts: 3
Reputation: lyndonp is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
lyndonp lyndonp is offline Offline
Newbie Poster

Re: Problem with Character Arrays

  #6  
Jul 27th, 2005
All,

Thanks for the great help - it was the null terminator that was causing the problem. Another newbie (me) gets bit by a simple problem, but you guys are great. Thanks again.

Lyndon
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C++ Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C++ Forum

All times are GMT -4. The time now is 8:03 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC