以下代码片段在执行strncpy
函数时以异常结束:
#define MAX_FILENAME_LEN 127
typedef struct {
unsigned long nameLength;
char name[MAX_FILENAME_LEN + 1];
} filestructure;
char *fileName;
strncpy( fileName, filestructure->name, MAX_FILENAME_LEN );
*( fileName + MAX_FILENAME_LEN+1 ) = 0;
Ayone知道什么可能出错?在文件结构中,我有一个50个字符长的文件名,所以它在界限内...我真的有点迷失了可能导致这个简单的代码片段中的问题......
答案 0 :(得分:5)
您尚未为目标缓冲区分配空间,fileName
未初始化。所以你试着复制某处。你应该分配内存,然后放心释放它。
char *fileName = new char[MAX_FILENAME_LEN + 1];
strncpy(...);
*(...) = 0;
doStuffWithTheBuffer( fileName );
delete[] fileName;// free memory
此外,如果您有一个大小为N + 1的缓冲区,并希望复制N个字节最大值并且空终止缓冲区,则应该执行
*(buffer + N) = 0;
答案 1 :(得分:1)
你的问题被标记为C ++,但代码是纯粹的C.为什么你这么做呢?事实上,C字符串处理并不是那么容易理解(并且即使对于那些掌握好它的程序员,偶尔也会出现错误的情况并不少见)是C ++让你的原因没有。
如果您正在编写C ++,请以C ++方式进行。使用std::string
。老实说,它将为您节省大量时间调试此类代码。
答案 2 :(得分:0)
您尚未为文件名分配空间。 <或者
filename = malloc (MAX_FILENAME_LEN * sizeof(char));
或
filename = strndup (filestructure->name, MAX_FILENAME_LEN);