Я пишу версию утилиты Unix expand
, которая заменяет вкладки пробелами в файле.Для этого я читаю каждый символ и проверяю, является ли он символом табуляции.Если это так, он заменяет вкладку указанным количеством пробелов, в противном случае символ печатается.
Мой основной метод выглядит так:
int main(int argc, char *argv[]){
FILE *fp;
char *help1="-help";
char *help2= "--help";
//int spaces; //number of spaces to replace tabs
fp= fopen(argv[1], "rw");
parse_file(fp, 4);
fclose(fp);
return 0;
}
метод parse_file выглядит как
void parse_file(FILE *fp, int spaces)
{
int i; //loop counter
char c; //current character
while (c!= EOF)
{
c= getchar(); //get char from stream
if (c=='\t') //if char is a tab
{
for (i=0; i< spaces; i++)
putchar(" "); //replace with spaces
}
else
putchar(c); //otherwise, print the character
}
}
При компиляции я получаю целое число из указателя без предупреждения приведения для putchar(" ");
, и программа выполняет ошибку segfault при выполнении.
Итак, мои вопросы:
1- Что означает предупреждение «делает целое число из указателя без приведения»?Что я могу сделать, чтобы решить эту проблему?
2- Код генерирует ошибку при выполнении с текстовым файлом, переданным в качестве аргумента.Есть ли в этом коде что-нибудь, что могло бы вызвать это?