Я пытаюсь написать программу, которая читает текст из файла, преобразует символы в верхний регистр, а затем записывает вывод в новый файл. Код прекрасно работает для чтения и преобразования в верхний регистр, но для записи выходной части, когда я создаю char*
для имени выходного файла, я получаю ошибку сегментации.
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
void lowerToUpper(char* temp)
{
char* name;
name = strtok(temp,":");
// Convert to upper case
char* s = name;
while (*s)
{
*s = toupper((unsigned char) *s);
s++;
}
}
int main()
{
int fd;
char* file_name_read = "./test.txt";
fd = open(file_name_read, O_RDONLY);
char* buf_rd;
ssize_t nr;
size_t byte_count = 1000;
off_t offset = 0;
nr = pread(fd, buf_rd, byte_count, offset);
close(fd);
lowerToUpper(buf_rd);
char* file_name_write = "./test_uppercase.txt";
/* CODE FOR WRITING TO THE FILE */
return 0;
}
Когда я удаляю строку char* file_name_write
, код работает нормально. Когда я включаю его в код, я получаю ошибку сегментации.
Я пытался
- удаление вызова на
lowerToUpper()
внутри main
- с использованием
char file_name_write[]
вместо char* file_name_write
- с использованием
malloc()
для выделения пространства и затем присвоения его значения
- с использованием различных значений
byte_count
и offset
Edit:
Проблема была в неинициализированном указателе с buf_rd
. Когда я добавил
char* buf_rd = (char*) malloc(1000 * sizeof(char));
это решило проблему.
Спасибо, мистер Листер и Люркер!