Combining Strings - Segmentation Fault


 
Thread Tools Search this Thread
Top Forums Programming Combining Strings - Segmentation Fault
# 15  
Old 02-12-2007
I was trying to compile the program after I did a few fixes to try to see if it works of not in changing the previous logic erorr. But in the end, the compiler, GCC 4.0.3, doesn't reconize the combine function? I worked fine previously, I don't under stand what went wrong. I have been looking at the source for the past 30 minutes, no idea.

Here is erorr:
Code:
combine-strings.c:4: error: syntax error before ‘char'
combine-strings.c: In function ‘combine':
combine-strings.c:7: error: ‘string1' undeclared (first use in this function)
combine-strings.c:7: error: (Each undeclared identifier is reported only once
combine-strings.c:7: error: for each function it appears in.)
combine-strings.c:9: error: ‘string3' undeclared (first use in this function)
combine-strings.c:11: error: ‘string2' undeclared (first use in this function)

Which the undeclarations make sence, if combine wasn't declared.

Now obviously the source would help:
Code:
#include <stdio.h>
/* #include <string.h> == cheating! */

char *combine(char string1[1000], char string2[1000] char string3[2000]) {
	int count1 = 0, count2 = 0, count3 = 0;

	while (string1[count1] != '\0') {
		++count1;
		string1[count1++] = string3[count3++];
	}
	while (string2[count2] != '\0')
		string3[count3++] = string2[count2++];
	string3[count3] = '\0';

	return string3;
}

main() {
	char string1[1000];
	char string2[1000];
	char string3[2000];
	int i = 0;
	int count = 0;
	
	printf("Enter two strings to be combined. Each under 1000 characters:\n");
	while(i == 0) {
		printf("1: ");
		gets(string1);
		while (string1[count] != '\0')
			++count;
		if (count > 1000) {
			i = 0;
			printf("I said under 1000 characters, please enter it again:\n");
		}
		else
			i = 1;
	}
	count = i = 0;
	while(i == 0) {
		printf("2: ");
		gets(string2);
		while (string2[count] != '\0')
			++count;
		if (count > 1000) {
			i = 0;
			printf("I said under 1000 characters, please enter it again:\n");
		}
		else
			i = 1;
	}
	printf("\"%s\" and \"%s\" combined are \"%s\"\n", string1, string2, combine(string1, string2, string3));
}

Thanks for reading, and helping, even though I feel as if I am acting helpless.
# 16  
Old 02-12-2007
The original function simply did not check for overflow. I submit

Code:
char * combine( char string1[1000] , char string2[1000] ) {

    int count1 = 0, count2 = 0;

    while ( string1[count1] != '\0' && count1 < sizeof (string1) )
        count1++;

    while ( string2[count2] != '\0' && count1 < sizeof (string1) )
            string1[count1++] = string2[count2++];

    if ( count1 == sizeof (string1) )
        return NULL;
    else
        string1 [count1] = '\0';

    return string1;
}

So, the function, if successful with return the base address of string1 [ ] else it returns NULL. The checks in red make certain two things:

1 ) if string1 is not terminated by a NUL character, it won't overflow, and
2 ) if the combined length of string1 and string2 is LARGER than string1, it won't overflow.

An overflow will return a NULL pointer.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

C. To segmentation fault or not to segmentation fault, that is the question.

Oddities with gcc, 2.95.3 for the AMIGA and 4.2.1 for MY current OSX 10.14.1... I am creating a basic calculator for the AMIGA ADE *NIX emulator in C as it does not have one. Below are two very condensed snippets of which I have added the results inside the each code section. IMPORTANT!... (11 Replies)
Discussion started by: wisecracker
11 Replies

2. Homework & Coursework Questions

Segmentation Fault

this is a network programming code to run a rock paper scissors in a client and server. I completed it and it was working without any error. After I added the findWinner function to the server code it starts giving me segmentation fault. -the segmentation fault is fixed Current problem -Also... (3 Replies)
Discussion started by: femchi
3 Replies

3. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

4. UNIX for Advanced & Expert Users

segmentation fault with ps

What does this mean and why is this happening? $ ps -ef | grep ocular Segmentation fault (core dumped) $ ps -ef | grep ocular Segmentation fault (core dumped) $ ps aux | grep ocular Segmentation fault (core dumped) $ ps Segmentation fault (core dumped) $ pkill okular $ ps... (1 Reply)
Discussion started by: cokedude
1 Replies

5. Programming

segmentation fault.

This code is causing a segmentation fault and I can't figure out why. I'm new to UNIX and I need to learn how to avoid this segmentation fault thing. Thank you so much. Thanks also for the great answers to my last post.:):b: int main() { mysqlpp::Connection conn(false); if... (3 Replies)
Discussion started by: sepoto
3 Replies

6. Programming

Segmentation fault.

I'm getting a segmentation fault. I'm new to Linux programming. Thanks so much for all of your input.:eek: #include </usr/include/mysql++/mysql++.h> #include <stdio.h> #include <iostream> #include <sstream> #include <string.h> using namespace std; int outputToImport(const char*... (1 Reply)
Discussion started by: sepoto
1 Replies

7. Programming

segmentation fault

What is segmentation fault(core dumped) (1 Reply)
Discussion started by: gokult
1 Replies

8. Programming

segmentation fault

If I do this. Assume struct life { char *nolife; } struct life **life; // malloc initialization & everything if(life->nolife == 0) Would I get error at life->nolife if it is equal to 0. wrong accession? (3 Replies)
Discussion started by: joey
3 Replies

9. Programming

Why not a segmentation fault??

Hi, Why I don't receive a segmentation fault in the following sample. int main(void) { char buff; sprintf(buff,"Hello world"); printf("%s\n",buff); } If I define a buffer of 10 elements and I'm trying to put inside it twelve elements, Should I receive a sigsev... (22 Replies)
Discussion started by: lagigliaivan
22 Replies
Login or Register to Ask a Question