Pelles C forum
C language => Beginner questions => Topic started by: Sascha8192 on August 13, 2011, 10:56:26 PM
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
char *eingabe(char *str) {
char input[MAX];
printf("Bitte \"%s\" eingeben: ",str);
fgets(input, MAX, stdin);
return strtok(input, "\n");
}
int main(void) {
char *ptr;
ptr = eingabe("Vorname");
printf("Hallo %s\n", ptr);
ptr = eingabe("Nachname");
printf("%s, interssanter Nachname\n", ptr);
return EXIT_SUCCESS;
}
Where is my mistake. pellesc 6.50.8 rc4
-
The array input[max] is created on your program's stack inside the function. When the function returns the function's memory is released, the array is destroyed and the variable ptr used in main is no longer valid. It's about "Scope"... basically anything you do after { is only valid until }
Here's a little example of why you should never try to return an array from a function... (the same rule applies for char, int, whatever)
#include <stdio.h>
int* MyFunction(int a, int b, int c)
{ static int array[3];
array[0] = a;
array[1] = b;
array[2] = c;
return array; } // return a pointer.
int main (void)
{ int *a1, *a2; // int pointers
printf("calling a1 = MyFunction(10,20,30);\t");
a1 = MyFunction(10,20,30);
printf("a1 has %d %d %d\n",a1[0],a1[1],a1[2]);
printf("calling a2 = MyFunction(100,200,300);\t");
a2 = MyFunction(100,200,300);
printf("a2 has %d %d %d\n",a2[0],a2[1],a2[2]);
printf("\nLooks good, except...\t");
printf("a1 now has %d %d %d\n",a1[0],a1[1],a1[2]);
getchar();
return 0; }
Type this up and try it both with and without the static keyword for the array...
-
ok
(the same rule applies for char, int, whatever)
I thought, is there a pointer exception
but there is so static ..
Thank you that you have helped me.
-
ok
(the same rule applies for char, int, whatever)
I thought, is there a pointer exception
but there is so static ..
Thank you that you have helped me.
No there's no pointer exception. C cannot return an array from a function. That's why you see all the string functions passing buffer pointers in.
If you have a C textbook or even a downloaded tutorial you should review the rules of scope for C... they're a real nuisance if you don't understand them... but understanding them lets you use them to advantage, doing some pretty amazing stuff.
Note that even with a static array in the example I gave you, it still messed up big time...