我有以下程序:(功能:墊空格串的右側,使用astreix這裏直觀方便):爲什麼memset不按預期工作?
操作系統:Windows(視覺工作室)
#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;
}
好像有memset中的一個問題,當我看着memeset後的值,它看起來很不正確,即垃圾爲什麼會這樣呢?最後我終止了字符串,但是我看到了垃圾值和堆棧損壞錯誤,不知道我的邏輯有什麼問題。
(I附上相同的快照)
「最後我終止了字符串」您的屏幕截圖顯示終止字符串的行尚未執行。 – tkausl
我null終止它爲了增加安全性我memset它的權利在一開始,但我看到垃圾字符串 –
是的,但字符串不是null終止。這將是一行之後。 –