2016-03-16 1 views
-1

Когда я пытаюсь напечатать каждый символ файла, я получаю ошибку сегментации. Я не понимаю, почему.Я не понимаю, как я получаю ошибку сегментации

void parseStringAndDelete(char *file) 
{ 
// I a passing "drwxr-xr-x 1 ftp ftp    0 Mar 07 12:34 A_Folder" 
// as an argument for the function 
int i = 0; 
int k = 0; 
int len = strlen(file); 
int startIndex = 0; 

//printf("%s\n", file); 
//printf("%d\n", len); 
if(file[0] == 'd') 
    { 
     for(i = 0; i<len; i++) 
     { 
     printf("%s\n", file[i]); 
     } 
    } 

} 
+0

Я нашел ошибку. Для printf ("% c \ n", файл [i]) not printf ("% s \ n", файл [i]). Я верю, потому что я печатаю символ по характеру не одну строку. –

+1

Включите предупреждения компилятора и посмотрите их. –

+0

Точно:% s предназначено для печати строк,% c предназначено для печати символов. Сначала вы должны научиться использовать отладчик, так что, по крайней мере, вы найдете строку, которая вылетает, а не только «я получаю ошибку сегментации». Во-вторых, всякий раз, когда у вас есть проблема, вам нужно приблизиться к ней, сказав: «Я где-то ошибся. Какую ошибку я сделал?» Никогда не думайте: «Мой код правильный, почему он не работает». Всегда думаю: «Мой код неправильный. Где это неправильно?» – gnasher729

ответ

2

Если вы хотите печатать каждый символ строки, то вы должны использовать %c и не %s.

printf("%c\n", file[i]); 

Кроме того,

При печати строки с помощью printf("%s", ..), вам необходимо передать адрес, где строка проживающее, не содержание адреса.

Таким образом, для char* str = "hello", оператор печати будет

printf("%s\n", str); 

и НЕ

printf("%s\n", str[0]); 
+2

Я думаю, что OP хочет 'printf («% c \ n », file [i]);' –

+0

Спасибо, что имеет смысл. Я исправил проблему с переключением% s на% c в printf –