2015-05-31 2 views
-4

я получил строку ошибки чтения в следующем коде:я получил ошибку чтения динамической строки в следующем коде:

#include <stdio.h> 
    #include <string.h> 

    main() 

{ 
int i = 0, j = 0,count=0; 

char x,*str3; 

char str2[50] = "nadir beton12345!"; 

for (; x = str2[i] = str2[j]; j++) 
{ 
    if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z') 
    { 
     count++; 

     i++; 
    } 
} 

     str3 = (char *)malloc((count * sizeof(char))+1); 

     printf("the new str without spaces and numbers is: \"%s\"\n", str3); 

     free(str3); 
} 

я отлаживать программу и когда отладчик прийти к динамическому распределению наклоняет читать строку ,

спасибо.

+2

Ну, это имеет смысл, вы никогда на самом деле str3 поэтому она содержит мусор – JSelser

+0

Пожалуйста, попробуйте исправить отступ вашего кода (вкладки могут не отображаться корректно в Stack Overflow, поэтому рассмотрите возможность использования пробелов). Сделав код более читаемым, у пользователей больше шансов внести свой вклад в ваш вопрос, чтобы помочь вам решить вашу проблему. – ace

+0

Если вы делаете модификацию на месте, почему вы выделяете место для новой строки? –

ответ

0

Я думаю, ваша проблема не с таНос, но с заданием:

char str2[50] = "nadir beton12345!"; 

Это создает постоянную строку, расположенную в режиме только для чтения сегмента виртуальной памяти процесса. Таким образом, это

str2[i] = str2[j] 

не может быть сделано.

Вы должны выделить Str3 до str3 цикла и обновления как:

#include <stdio.h> 
#include <string.h> 
#include <malloc.h> 

main() 

{ 
    int i = 0, j = 0,count=0; 

    char x,*str3; 

    char str2[50] = "nadir beton12345!"; 

    str3 = (char *)malloc((count * sizeof(char))+1); 

    for (; (x = str3[i] = str2[j]) != '\0'; j++) 
    { 
     if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z') 
     { 
     count++; 

     i++; 
     } 
    } 

    printf("the new str without spaces and numbers is: \"%s\"\n", str3); 

    free(str3); 
} 

Надеется, что помог,

+0

Нет, эта строка отлично модифицируется. Возможно, вы думаете о 'const char * foo =" asdf ";'. Изменение этих байтов, вероятно, будет проблемой. –

+0

все еще не работает .. – yigal92