Wywołanie funkcji z jednym lub dwoma argumentami

0

Czy takie wywołanie funkcji i czy ta funkcja jest poprawna? Czy można to jakoś zapisać, żeby to wyglądało "ładniej"? Zmienna w funkcji musi być typu const char* i będzie wywoływana z jednym lub dwoma argumentami.

 #include <stdio.h>
#include <string.h>

int test(const char* arg1 = '\0', const char* arg2 = '\0') {

}

int main(){
	test("test");
	test("test", "test");
}
3

To Ci się nie skompiluje - domyślny argument dla const char* nie może mieć typu char.

int test(const char* arg1 = "", const char* arg2 = "")

lub

int test(const char* arg1 = nullptr, const char* arg2 = nullptr)

Btw, jeśli chcesz wołać z jednym lub z dwoma argumentami, to nie ma potrzeby aby pierwszy miał domyślny argument.

1

Wywołanie jest poprawne, ale deklaracja funkcji już nie.

0

W swoim kodzie zamiast kilku domyślnych argumentów wolę przeładowywać. Skrajnie uproszczony przykład.

void test(int arg) {std::cout << arg << "\n";}

void test(int arg1, int arg2) {
	test(arg1);
	test(arg2);
}

int main() {
	test(1);
	test(2,3);
	return 0;
}
0

@kq Dziękuję za pomoc!

0

A taki kod będzie poprawny? Dobrze alokowałem pamięć?

 #include <stdio.h>
#include <string.h>
#include <malloc.h>

int test(const char* arg1, const char* arg2 =  nullptr) {
	char* zm = (char*)malloc(strlen(arg1)+1);

	strcpy(zm, arg1);
	if (arg2 != nullptr) {
		zm = (char*)realloc(zm, _msize(zm)+strlen(arg2));
		strcat(zm, arg2);
	}
	printf("%s", zm);
	free(zm);
	return 0;
}
 
int main(){
    test("test");
    test("test", "test");
}
0

Wygląda ok, tylko korzystasz z niestandardowej funkcji _msize. Zamiast tego po prostu zapamiętaj rozmiar poprzedniej alokacji.

0

Kod, który wkleiłeś nawet się nie kompiluje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1