Ich habe das unten Programm: (Funktionalität: Pads White Spaces rechts von Zeichenfolge verwendet astreix hier für die visuelle Leichtigkeit):Warum funktioniert das Memset nicht wie erwartet?
Betriebssystem: Windows (Visual Studio)
#include "stdafx.h"
#include<stdlib.h>
#include<string.h>
#define CBUFFSIZE 48
void right_pad_str(char *pad_str, char *buff,int max_buffsize){
int padstr_len = 0;
int space_len = 0;
char *end_str = NULL;
memset(buff, '\0', max_buffsize);
padstr_len = strlen(pad_str);
space_len = ((max_buffsize - 1) - padstr_len);
strncpy_s(buff, max_buffsize, pad_str, strlen(pad_str));
end_str = buff +padstr_len;
memset((end_str), '*', space_len);
buff[max_buffsize] = '\0';
}
int _tmain(int argc, _TCHAR* argv[]){
char tmpstr[49] = { '\0' };
char *str = "hello_world";
right_pad_str(str, tmpstr, CBUFFSIZE + 1);
return 0;
}
Es scheint zu sein, ein Problem bei memset, wenn ich auf den Wert post memeset schaue, sieht es sehr inkorrekt dh Junk, warum ist das? Am Ende ich null die Zeichenfolge zu beenden, aber ich sehe Junk-Wert und einen Stapel Korruption Fehler, nicht sicher, was ist los mit meiner Logik.
(Ich habe einen Schnappschuss der gleichen befestigt)
"Am Ende ich Null die Zeichenfolge beenden" Ihr Screenshot zeigt, dass die Zeile, die Nul-Terminiert die Zeichenfolge noch nicht ausgeführt hat. – tkausl
Ich null es für zusätzliche Sicherheit beenden Ich Memse es direkt am Anfang, aber ich sehe Müll in der Zeichenfolge –
Ja, aber die Zeichenfolge ist noch nicht null beendet. Es wird eine Zeile später sein. –