ugrás a tartalomhoz

C-ben char tömböt hogyan adok vissza egy függvényben?

morocztamas · 2012. Jún. 17. (V), 09.18
char* TopOrBottom (char character, int width) {
    char str[width];
    str[0] = '*';
    int i = 1;
    for (i = 1; i < width - 1; ++i) {
        str[i] = character;
    }
    str[width - 1] = '*';
    str[width] = 0;
    return str;
}
user@pc:~/dev/c/pprint$ gcc -Wall -W -Werror pprint.c -o pprint
pprint.c: In function ‘TopOrBottom’:
pprint.c:22:5: error: function returns address of local variable [-Werror]
cc1: all warnings being treated as errors
 
1

malloc

Hidvégi Gábor · 2012. Jún. 17. (V), 11.43
A hibaüzenet mindent elmond: lokális változóra való hivatkozást adsz vissza a függvény végén, viszont az ilyen változók ilyenkor elvesznek. A megoldás, hogy malloc-cal lefoglalod a megfelelő méretű memóriát, bemásolod a karaktereket, és a malloc által visszaadott mutatóval térsz vissza.

Az str[width] = 0; szerintem nem helyes, str[width] = '\0'; inkább, de majd meglátod, mit mond a fordító.
2

Próbáltam

morocztamas · 2012. Jún. 17. (V), 12.06
Rákerestem és több változatot is kipróbáltam, de mindegyikre hibát dobott.
4

0 éd '\0' itt ekvivalens.

Joó Ádám · 2012. Jún. 17. (V), 23.19
0 és '\0' itt ekvivalens.
3

#include <stdio.h>#include

eddig bírtam szó nélkül · 2012. Jún. 17. (V), 15.22

#include <stdio.h>
#include <stdlib.h>

char* tt(char c, int w){
	char* ptr;
	ptr=malloc(w);
	*ptr=c; *(ptr+1)=0;
	return ptr;
}


void main(){
	printf("%s\n------\n",tt('1',3));
}
Nekem így működik. Nem 1:1-ben az, amit te akarsz, de a pointeres rész stimmel.