我有以下程序:(功能:垫空格串的右侧,使用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终止。这将是一行之后。 –