char* buffer = new char[8]; memset(buffer, 255, 8);为什么字符串地址会失效
时间: 2023-06-27 20:00:57 浏览: 143
这段代码并没有涉及字符串的操作,而是在动态分配了一个长度为8个字符的字符数组并将其每个元素都初始化为255。
如果你的问题是关于字符数组地址失效的话,可能是因为你没有及时释放动态分配的内存空间,导致内存泄漏。在使用完动态分配的内存空间后,应该通过delete[]来释放它,以便系统能够回收这部分内存。
如果你能提供更详细的代码和问题描述,我可以更具体地回答你的疑问。
相关问题
char* buffer = new char[8]; memset(buffer, 255, 8);为什么不能存255,会报错
这是因为 `memset()` 函数将 `255` 转换为 `unsigned char` 类型,并将其值存储在内存中的每个字节中。因此,对于 `buffer` 数组中的每个字节,它们都被设置为 `11111111`,即十进制下的 `255`。
但是,如果你尝试将 `buffer` 数组中的任何一个元素作为字符来打印,你会发现输出的字符并不是 `255`,而是一个乱码字符,这是因为这个字符的 ASCII 码值为 `255`,但是除了少数操作系统和编译器外,大多数系统都将 `255` 视为控制字符或特殊字符。
所以,如果你想将 `buffer` 数组的每个元素设置为 `255`,你应该这样写:
```c++
char* buffer = new char[8];
for(int i=0; i<8; i++)
buffer[i] = 255;
```
或者简单地使用 `std::fill_n()` 函数:
```c++
char* buffer = new char[8];
std::fill_n(buffer, 8, 255);
```
这样就可以将 `buffer` 数组的每个元素都设置为 `255`,而不会出现问题。
以下代码存在什么问题,请指出,并将修改后的代码贴出。 void read_file(FILE* file, size_t filesize) { char* buffer = (char*)malloc(filesize); if (NULL != buffer) { memset(buffer, 0, filesize); fread(buffer, filesize, 1, file); printf("%s\n", buffer); free(buffer); buffer = NULL; } }
以上代码在读取文件时并没有检查文件是否读取成功,如果文件读取失败,会导致malloc分配内存时出错,从而导致程序崩溃。此外,对于fread的返回值也没有进行检查,无法保证读取的字节数与文件大小一致。
为了避免以上问题,可以在读取文件前先检查文件是否打开成功,以及在读取文件后检查读取的字节数是否与文件大小一致。
修改后的代码如下:
```c++
void read_file(FILE* file, size_t filesize) {
if (file == NULL) {
printf("File open failed!\n");
return;
}
char* buffer = (char*)malloc(filesize);
if (buffer == NULL) {
printf("Memory allocation failed!\n");
return;
}
size_t bytes_read = fread(buffer, 1, filesize, file);
if (bytes_read != filesize) {
printf("Read file error!\n");
free(buffer);
return;
}
printf("%s\n", buffer);
free(buffer);
buffer = NULL;
}
```
这样就可以避免文件读取失败和读取字节数不一致的问题。
阅读全文