char* naruszenie pamięci

0

Mam taki problem oto kod:

 
#include <iostream>

using namespace std;

int main(void)
{
	char* tab = new char[20] ;
	tab = "asdasdasd";
	cout << tab ; 
	tab[0] = 'f' ;
	cout << tab ; 
	cout << endl ;
	return 0;
}

Przy tej linijce

tab[0] = 'f' ; 

wyrzuca core dumped. Ma ktoś jakiś pomysł jak to obejść? Myślałem, że tak można :c

0

Przeanalizuj: http://ideone.com/dtIePY

Napisze slowami, bo widze ciezko:
#Alokujesz pewien obszar pamieci, i adres tego obszaru wpakowujesz do wskaznika tab.
#Nastepnie przypisujesz wskaznikowi tab adres literalu znakowego.
#To powoduje natychmiastowego mem-leaka.
#Literal znakowy ma typ const char* a traktujesz go jako char*.
#Kazda proba modyfikacji const char* jest zabroniona!

0

jasne, rozumiem ale da się to obejść? tak, żeby mieć w 1 zmiennej "fsdasdasd"?

1

Funkcja strcpy załatwi sprawę.

1
char* tab = malloc(20);
	strncpy(tab, "asdasdasd", 20);

	// lub
	char tab2[] = "asdasdasdasdasd";
0
Lord Darkstorm napisał(a):

Funkcja strcpy załatwi sprawę.

Albo StringCchCopy :)

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