Połączenie napisów

0

Hej. Próbuję napisać funkcję łączącą 2 napisy oddzielone spacją w jednej tablicy. Wygląda to tak

#include "stdafx.h"
#include <cstring>

char* PolaczNapisy (char* imie,char* nazwisko)
{
	int a,b,c;
	a = sizeof(imie);
	b = sizeof(nazwisko);
	c = a+b+1;
	char * tablica = new char[c];
	strcpy_s(tablica,sizeof(imie),imie);
	strcat_s(tablica,1," ");
	strcat_s(tablica,sizeof(nazwisko),nazwisko);
	return tablica;
}


int _tmain()
{
	char napis1 = "Imie";
	char napis2 = "Nazwisko";
	PolaczNapisy(napis1,napis2);
	return 0;
}
 

Niestety konsola wywala błędy, że nie może przekonwertować argumentów z maina ( char ) do wskaźników na chara w funkcji. Jak sobie z tym poradzić?

 
Error	1	error C2440: 'initializing' : cannot convert from 'const char [5]' to 'char'	c:\users\filip\desktop\moja nauka c++\consoleapplication5\consoleapplication5\consoleapplication5.cpp	23
Error	2	error C2440: 'initializing' : cannot convert from 'const char [9]' to 'char'	c:\users\filip\desktop\moja nauka c++\consoleapplication5\consoleapplication5\consoleapplication5.cpp	24 

//EDIT
Dobra, nie ważne. zapomniałem przy napis1 i napis2 dodać []. Jednak teraz, gdy próbuję skompilować wyskakuje mi błąd programu
user image

0
    char *napis1 = "Imie";
    char *napis2 = "Nazwisko";
    char *razem = strcat(strcpy(new char[strlen(napis1)+strlen(napis2)+1],napis1),napis2);
0

Pracuje na Visualu 2012, gdzie obowiązują strcat_s i strcpy_s. strcat_s i strcpy_s biorą 3 argumenty. Tablica, do której ma zostać skopiowane, rozmiar tablicy oraz tablica, z której ma być skopiowana. Chciałem dodać 3 argument, ale niestety pogubiłem się trochę patrząc na Twój kod. Co mam dodać, zeby działało to pod Visuala 2012?

Co do błędu już chyba wiem o co chodziło. Używając sizeof program brał rozmiar wskaźnika, a nie samej tablicy. Trzeba było użyć strlen. Jednak mimo to program mi nie zadziałał.

0

strcat_s, strcpy_s i inne z _s są funkcjami nie należącymi do standardu i nie powinno się z nich korzystać.
Porównaj sobie swój kod, z tym poniżej i zobacz gdzie zrobiłeś błędy:

 
#include <cstdio>
#include <cstring>

char * PolaczNapisy(const char * imie, const char * nazwisko) {
    char * tablica = new char[strlen(imie) + strlen(nazwisko) + 2];
    
    strcpy(tablica, imie);
    strcat(tablica, " ");
    strcat(tablica, nazwisko);
    return tablica;    
}

int main() {
    const char * napis1 = "Imie";
    const char * napis2 = "Naziwsko";
    printf("%s\n", PolaczNapisy(napis1, napis2) );

    return 0;    
}

na szybko pisane :)

0

Visual 2012 nie chce przepuścić zwykłych strcpy i strcat, gdyż mogą być niebezpieczne.

Error	1	error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	c:/consoleapplication5.cpp	14
1

To na moją klawiature będzie tak, bo nie mam visuala zainstalowanego:

int n = strlen(imie) + strlen(nazwisko) + 2;
strcpy_s(tablica, n, imie);
strcat_s(tablica, n, " ");
strcat_s(tablica, n, nazwisko); 

wzorując się na: http://msdn.microsoft.com/pl-pl/library/d45bbxx4.aspx
oraz: http://msdn.microsoft.com/pl-pl/library/td1esda9.aspx

0

Wydaję mi się, że drugim argumentem jest rozmiar tablicy kopiowanej, a nie tej, do której się kopiuje.
Anyway, teraz znowu mi wypieprza błąd programu o zbyt małym buferze. Wina kodu, Visuala czy jakiś uprawnień na moim PC?
http://screenshu.com/static/uploads/temporary/yw/cm/9k/d386yb.jpg

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