Ein Zeichen an einen String anhängen

moin


Das Problem ist das du nur einen String kopieren kannst/solltest du durch ein '\0' abgeschlossen ist. Sonst kopiert er dir solange Zeichgen in str bis mal zufällig ein '\0' im Arbeitsspeicher liegt.

Code:
char *str, *str_arr[35];
 
str_arr[0] = 'a';
str_arr[1] = 'b';
str_arr[2]= '\0';
str = malloc(3);
str = "";
 
strcat(str,str_arr);
So sollte es gehen.


In deinem Code erzeugst du schon du einen Pufferüberlauf in folgenden zwei Zeilen:
Code:
str_arr[0] = "a"';
str_arr[1] = "b";
Die erste Zeile geht noch, die zweite Zeile kopiert nicht nur ein b rein sonder auch ein '\0' und damit sind es wieder mehr Zeichen als Speicher reserviert ist.
Also eizelne Zeichen immer in Hochkommas.

Für dein Problem hab ich aber auch schon auf die Funktion strncat hingewiesen, dir nur soviele Zeichen anhängt wie du vorgibst.


mfg
umbrasaxum
 
Jetzt gibt es einen Compiler Fehler. [Warning] passing arg 2 of `strcpy' from incompatible pointer type
ich werde mal den QT posten:
Code:
#include <stdio.h>
 
char *count[62]
 
int var_init(){
	// Zahlen
	count[0]="0";count[1]="1";count[2]="2";count[3]="3";count[4]="4";
	count[5]="5";count[6]="6";count[7]="7";count[8]="8";count[9]="9";
	// Kleinbuchstaben
	count[10]="a";count[11]="b";count[12]="c";count[13]="d";count[14]="e";
	count[15]="f";count[16]="g";count[17]="h";count[18]="i";count[19]="j";
	count[20]="k";count[21]="l";count[22]="m";count[23]="n";count[24]="o";
	count[25]="p";count[26]="q";count[27]="r";count[28]="s";count[29]="t";
	count[30]="u";count[31]="v";count[32]="w";count[33]="x";count[34]="y";
	count[35]="z";
	// Großbuchstaben
	count[36]="A";count[37]="B";count[38]="C";count[39]="D";count[40]="E";
	count[41]="F";count[42]="G";count[43]="H";count[44]="I";count[45]="J";
	count[46]="K";count[47]="L";count[48]="M";count[49]="N";count[50]="O";
	count[51]="P";count[52]="Q";count[53]="R";count[54]="S";count[55]="T";
	count[56]="U";count[57]="V";count[58]="W";count[59]="X";count[60]="Y";
	count[61]="Z";
	return 0;
}
 
int count_it(){
	int i, integ, status1;
	char *str, *give_str[3];
 
	str = malloc(3);
	integ = -1;
	status1 = 0;
	for(i=0;i<62*62;i++){
		integ++;
		str = "";
		give_str[0] = count[status1];
		give_str[1] = count[integ];
		give_str[2] = "\0";
		strcat(str,give_str);
		// strcat(str,count[integ]);
		printf("%s\n",str);
 
		if(integ==61){
			integ = -1;
			status1++;
		}
 
	}
	return 0;
}
 
int main(){
	init_var();
	count_it();
	getch();
	return 0;
}
 
Zuletzt bearbeitet:
moin


Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

char count[62];

int init_var()
{
	int z=0;

	// Zahlen
	for(int i=0; i<10; i++)
		count[z++]=(char)('0' + i);

	// Kleinbuchstaben
	for(int i=0; i<26; i++)
		count[z++]=(char)('a' + i);
	
	// Großbuchstaben
	for(int i=0; i<26; i++)
		count[z++]=(char)('A' + i);
	
	return 0;
}

int count_it(){
	int i, integ, status1;
	char *str;

	str = (char*)malloc(3);
	
	integ = -1;
	status1 = 0;
	str[2] = '\0';

	for(i=0;i<62*62;i++){
		integ++;
		strncpy(str,&count[status1], 1);
		strncpy(str,&count[integ], 1);
		printf("%s\n",str);

		if(integ==61){
			integ = -1;
			status1++;
		}

	}
	return 0;
}

int main(){
	init_var();
	count_it();
	getch();
	return 0;
}
Was soll dein Code bezwecken?


mfg
umbrasaxum
 
Ich wuste das diese Frage aufkommt: "Wozu ist der QT gut?"
Da es auf den ersten Blick so aussieht als ob es ein Passwortcracker werden soll.
Aber dem ist nicht so ich schreibe dies um meine Kenntnisse aufzufrischen.
Jetzt kommt die frage auf warum ich nicht das strcat(); nicht alleinestehend teste, ganz
einfach: Ich wollte Testen wie ich meine bisherigen Kenntnisse kombieren kann.

THX für die Hilfe
MFG FBIagent
 
moin


Nochmal was soll der Code machen?
Mit Passwort cracken hat das ja noch ncihts zu tun, eher mit nem Wortgenerator...
Also beschreib mal etwas genauer.


mfg
umbrasaxum
 
Der Code soll einfach nur von 00 - ZZ durchzählen also
01,02,03,04,05,06,07,08,09,0a,0b,00c,0d,0e,0f,0g,0h,0i,0j,0k,0l,0m,0n,...

und das auch so ausgeben. Achja bei deiner Lösung hat str immer nur ein zeichen und fängt bei "b" an. Sprich mit:
Code:
strncpy(str,&count[status1], 1);
strncpy(str,&count[integ], 1);
bekommt str nur count[integ].

Also doch noch nicht gelöst.
 
Zuletzt bearbeitet:
FBIagent hat gesagt.:
Ich habe nur irgendwo mal gelesen wenn man 2 Zeichenketten zusammenfügt:
Code:
strcat(str,str_arr[1]);
,
das bei diesem Beispiel der neue String in str_arr[1] gespeichert wird.

Nö. Der erste Parameter ist das Ziel, der String str_arr[1] wird also an str angehängt. Ein neuer String wird dabei nicht erzeugt. Siehe link.

Tobias K. hat gesagt.:
In deinem Code erzeugst du schon du einen Pufferüberlauf in folgenden zwei Zeilen:
Code:

str_arr[0] = "a"';
str_arr[1] = "b";


Die erste Zeile geht noch, die zweite Zeile kopiert nicht nur ein b rein sonder auch ein '\0' und damit sind es wieder mehr Zeichen als Speicher reserviert ist.

Wieso? str_arr ist ein Array von Strings (char *[]) und man kann doch wohl diesem Array Strings zuweisen, oder?! Anders wär's natürlich wenn es ein Array von chars wäre.
 
moin


Nein der fängt nciht bai b an! Nur werden 62*62 Zeilen erzeugt, die nciht alle auf einmal dargestellt werden!

Und wegen deinem PS:
Wenn du dich damit ja so gut auskennst, zwingst du mich fast den Thread zu schliessen!
Sollte in dem Code irgendwas auftauschen was mit mehr als nem Wortgenerator zu tun hat, ist er dicht.

@deepthroat
Hast recht, hab str_arr und str durcheinandergebracht...


mfg
umbrasaxum
 
moin


So, wenn es nur 2 stellig sein soll würde ich es einfach so machen:
Code:
for(i=0;i<62*62;i++)
{
	str[0] = count[status1];
	str[1] = count[integ++];
	str[2] = '\0';
		
	printf("%s\t",str);

	if(integ==61){
		integ = 0;
		status1++;
	}
}
Außerdem hab ich das \n durch 2 Leerzeichen ersetzt, damit alles auf den Bildschirem passt.


mfg
umbrasaxum
 
Ich meinte ja auch nur weil du gefragt hattest wofür der QT gut sein sollte.
Werde das PS wieder rausnehmen.
Das strncpy funktionierte nicht habe es ausgetauscht mit folgendem erfüllt seinen zweck des
zuweisens:

str[0] = count[satus1];
str[1] = count[integ];

THX für die Hilfe
MFG FBIagent
 

Neue Beiträge

Zurück