Lilyanaa Ответов: 1

Использование strncpy на языке C


Привет, я пытаюсь в этом коде вырезать части из массива char и поместить их в другой в боковой структуре, но у меня есть ошибка в выводе

выход :
lara200lara300h�y��
lara300lara400
lara400

так и должно быть
lara200
lara300
lara400


Что я уже пробовал:

  #include <stdio.h>
  #include <stdlib.h>
  #include<string.h>
  #define InfoSize  3
  int main(int argc, char *argv[])
  {

  struct st
  {
     char name[50];
  };

 char nn[100]="lara100lara200lara300lara400" ;
 int start=7;  //represent the beginning of string
 int end=7;    // represent the length of string
 struct st info[InfoSize] = {0};


 for( int i = 0; i < InfoSize; ++i )
 {

            strncpy( info[i].name, &nn[start],end);
            printf("   %s \n", info[i].name);

    start+=7;


  }

}

1 Ответов

Рейтинг:
2

Rick York

Вам нужно добавить null в конец каждой копируемой подстроки. Вы можете сделать то же самое, инициализировав структуру до нуля. Что-то вроде:

struct st info[3] = { 0 };

Кроме того, вам нужно иметь диапазон циклов for от 0 до 2, потому что это индексы, необходимые для доступа к этому массиву. Первый пункт-0 в с. Лучше всего думать об этом как о смещении - нулевое значение смещения является первым.

Один совет: иметь значение размера или практически любую другую константу, используемую буквально, - это плохая идея, которая может привести к ошибкам. В вашей программе есть три элемента в структуре, и вы проходите через каждый из них в операторе for. Что произойдет, если вы решите иметь пять элементов? Вы должны найти каждое место, где вы использовали три и изменить его. Именно здесь могут произойти ошибки, потому что с более крупной программой вы, скорее всего, пропустите одну из них. Лучше иметь одно определение, которое использует все остальное :
#define InfoSize  3

struct st info[InfoSize] = {0};

for( int i = 0; i < InfoSize; ++i )
{
// logic goes here
}

Таким образом, если вам нужно пять, восемь или двадцать предметов, вы меняете только одну вещь.


Lilyanaa

Я ее решаю :)