![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Why not a segmentation fault?? | lagigliaivan | High Level Programming | 22 | 05-21-2008 08:07 AM |
| Segmentation fault | big123456 | Linux | 0 | 07-20-2007 02:01 AM |
| Segmentation Fault | compbug | UNIX for Dummies Questions & Answers | 3 | 04-21-2006 07:43 AM |
| Segmentation fault | jshaulis | AIX | 1 | 06-01-2004 01:16 PM |
| segmentation fault | omran | High Level Programming | 2 | 08-01-2003 05:19 AM |
|
|
Submit Tools | LinkBack | Thread Tools | Display Modes |
|
#1
|
|||
|
|||
|
Combining Strings - Segmentation Fault
I am writing a function to combine strings, but when I execute I get a segmentation fault, which doesn't make sence. Segmentation fault is when you try to acess a point of memory that doesn't exist, like trying to acess array[10] when you declared array[7].
Here is the source code: Code:
#include <stdio.h>
/* #include <string.h> == cheating! */
#define MAXINPUT 1000
char combine(char string1[MAXINPUT], char string2[MAXINPUT]) {
int count1, count2 = 0;
while (string1[count1] != '\0')
++count1;
while (string2[count2] != '\0')
string1[count1++] = string2[count2++];
string1[count1] = '\0';
}
main() {
char string1[MAXINPUT];
char string2[MAXINPUT];
int i = 0;
printf("Enter two strings each under 1000 characters:\n");
while(i = 0) {
printf("1: ");
scanf("%s", string1);
if ((sizeof string1) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
i = 1;
}
i = 0;
while(i = 0) {
printf("\n2: ");
scanf("%s", string2);
if ((sizeof string2) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
i = 1;
}
printf("%s and %s combined is %s", string1, string2, combine(string1, string2));
return 0;
}
Thanks for reading. |
| Forum Sponsor | ||
|
|
|
#2
|
||||
|
||||
|
(sizeof string1) is a constant and will not vary depending on the contents of string1. And what if 1200 characters were entered? Where do you think the extra 200 will be? You seem to be intentionally blowing arrays.
But your problem is the combine routine. It returns a character, not a string. Or it would had you returned *anything*. Then you use this character as a pointer to character. It looks like you might mean for combine to return a pointer to character. If so, define it that way and put in a return statement. |
|
#3
|
|||
|
|||
|
Quote:
|
|
#4
|
||||
|
||||
|
1.st problem:
Quote:
Code:
char combine(char string1[MAXINPUT], char string2[MAXINPUT]) {
int count1, count2 = 0;
while (string1[count1] != '\0')
++count1;
while (string2[count2] != '\0')
string1[count1++] = string2[count2++];
string1[count1] = '\0';
}
2.nd problem: Code:
..
printf("Enter two strings each under 1000 characters:\n");
while(i = 0) { // should be while (i == 0)
printf("1: ");
scanf("%s", string1);
if ((sizeof string1) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
i = 1;
}
i = 0;
while(i = 0) { // should be while (i == 0)
printf("\n2: ");
scanf("%s", string2);
if ((sizeof string2) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
...
|
|
#5
|
||||
|
||||
|
Quote:
|
|
#6
|
|||
|
|||
|
Thanks milhan, you explained it better. I still get a segmentation fault that I don't understand, the current source (almost same as before) :
Code:
#include <stdio.h>
/* #include <string.h> == cheating! */
#define MAXINPUT 1000
char combine(char string1[MAXINPUT], char string2[MAXINPUT]) {
int count1, count2 = 0;
while (string1[count1] != '\0')
++count1;
while (string2[count2] != '\0')
string1[count1++] = string2[count2++];
string1[count1] = '\0';
return string1;
}
main() {
char string1[MAXINPUT];
char string2[MAXINPUT];
int i = 0;
printf("Enter two strings each under 1000 characters:\n");
while(i == 0) {
printf("1: ");
scanf("%s", string1);
if ((sizeof string1) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
i = 1;
}
i = 0;
while(i == 0) {
printf("2: ");
scanf("%s", string2);
if ((sizeof string2) > MAXINPUT) {
i = 0;
printf("I said under 1000 characters, please enter it again:\n");
}
else
i = 1;
}
printf("%s and %s combined is %s", string1, string2, combine(string1, string2));
return 0;
}
Code:
return string1; Code:
combine-strings.c:15: warning: return makes integer from pointer without a cast Code:
return (int) string1; Code:
return string1[0]; Code:
return string1[MAXLINE]; The odd part is I don't seem to be asking for a part of memory that doesn't exist. |
|
#7
|
||||
|
||||
|
octal look at your combine(char [], char[]) function again. I didn't see it at my previous post either.
Code:
char combine(char string1[MAXINPUT], char string2[MAXINPUT]) {
int count1, count2 = 0; // you didn't initialize count1, so=> int count1 = 0, count2 = 0;
while (string1[count1] != '\0')
++count1;
while (string2[count2] != '\0')
string1[count1++] = string2[count2++];
string1[count1] = '\0';
return string1;
}
Quote:
|
||||
| Google The UNIX and Linux Forums |