Использование strncat с элементом массива char в C - PullRequest
0 голосов
/ 15 мая 2010

Я получил ошибку с помощью следующего кода, и я не могу понять это.

   char name[]="tolgahan"
   char result[100]="";
   strncat(result,name[1],1);

Думаю, мне нужно преобразовать имя [1] в строковый формат, но я не знаю, как мне это сделать.

Пожалуйста, помогите мне. С наилучшими пожеланиями.

Ответы [ 3 ]

2 голосов
/ 15 мая 2010

Выражение

name[1] 

это символ - вам нужен указатель:

strncat(result,name + 1,1);
2 голосов
/ 15 мая 2010

Попробуйте:

strncat(result, & name[1],1);

или

strncat(result, name + 1,1);

Объяснение: Строка в C - это просто адрес (в памяти) первого символа в последовательности символов. Поэтому, если вы берете указатель (используя оператор & или добавляя 1 к начальному указателю), вы получите строку, начинающуюся со 2-го символа исходной строки.

0 голосов
/ 16 мая 2010

Но использование strncat для 1-символьной копии излишне и не очень разумно.

в вашем случае я бы сделал что-то еще подобное

 char name[]="tolgahan";
 char result[100]= "";
 size_t l = 0;
 result[l++] = name[1];

Отслеживая длину моей первой строки, я могу избежать скрытых вызовов strlen (это то, что strncat делает внутри).

 result[l++] = 'H';
 result[l++] = 'e';
 result[l++] = 'l';
 result[l++] = 'l';
 result[l++] = 'o';
 result[l++] = 0;

У меня все еще есть реальная длина моей строки в l, и я избежал вызова, и компилятор может даже изменить внутреннюю структуру, чтобы использовать меньше операций с памятью.

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