Копирование буквенно-цифровых символов в C - PullRequest
1 голос
/ 24 октября 2010

У меня есть массив символов текста, я хочу сохранить буквенно-цифровое значение в нижнем регистре в массиве указателей.то есть mystr должен указывать на символ [] "50sometexthere"

char[] myline = " 50 Some Text  Here ";
char *mystr = (char *)malloc(128 * sizeof(char));

char *tmp = myline;

while (*tmp != '\0'){
 if (isalnum(*tmp))
  strcat(mystr,(char*) tolower(*tmp));
 tmp++;
}

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 24 октября 2010

Функция tolower возвращает целое число, и вы ошибочно приводите его к char *.

Лучший способ сделать это - скопировать буквенно-цифровые символы из исходного массива в целевой массив

char myline[] = " 50 Some Text  Here "; // put the [] after the variable.
char *mystr = malloc(128);

char *tmp = myline;
char *destPtr = mystr;

while (*tmp != '\0'){
 if (isalnum(*tmp)) {
   *destPtr++ = *tmp;
 }
 tmp++;
}
*destPtr = 0;  // terminating nul character.

Если вы действительно хотите использовать strcpy, вам нужно инициализировать строку назначения в пустую строку и сделать символ для копирования частью массива символов и добавить этот массив в строку назначения:

char myline[] = " 50 Some Text  Here "; // put the [] after the variable.
char *mystr = malloc(128);

char *tmp = myline;
mystr[0] = 0;  // initialize the destination string.
while (*tmp != '\0'){
        char str[2] = {0}; // temp string of size 2.
        if (isalnum(*tmp))
                str[0] = tolower(*tmp); // put the char to be copied into str.
                strcat(mystr,str);      // append.
        tmp++;
}
2 голосов
/ 24 октября 2010
char *myline = " 50 Some Text  Here ";
char *mystr = (char *)malloc(128); //sizeof char is always 1

char *tmp = myline;
char *tmpdest = mystr;

while (*tmp != '\0'){
 if (isalnum(*tmp))
  *tmpdest++ = tolower(*tmp); //this line is changed!
 tmp++;
}

*tmpdest = '\0';

НТН

0 голосов
/ 24 октября 2010

Ваша ошибка - приведение в вызове strcat.

почти всегда приведение, в C, неверно

strcat принимает 2 указателя на char, вы предоставляете указатель на char и int (ошибочно приводятся к указателю на char).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...