Как инициализировать массив символов и очищать его снова и снова в цикле перед strcpy () в C? - PullRequest
0 голосов
/ 02 октября 2009

Я хочу заново инициализировать d каждый раз в цикле

     char d[90];   
     while(ptr != NULL)
    {
        printf("Word: %s\n",ptr);
        //int k = 0;
        strcpy(d, ptr);
        d[sizeof(d)-1] = '\0';
        //something more
        ....
        ....
     }

Ответы [ 4 ]

4 голосов
/ 02 октября 2009

Нет необходимости делать что-либо «до» strcpy(). Вызов strcpy() в буфере d перезапишет все, что находится в буфере, и оставит буфер, содержащий строку, на которую указывает ptr во время вызова. Нет необходимости присваивать последний символ '\ 0'.

Конечно, если вы делаете явное завершение, потому что вы не уверены, что strcpy() будет перезаписывать d, тогда у вас есть проблема. Вы должны использовать strlen() на ptr перед копией, чтобы убедиться, что она подходит, или используйте snprintf(), если она у вас есть.

0 голосов
/ 02 октября 2009

Просто сделайте strcpy(d, ptr). strcpy добавит терминатор NULL в конце для вас, конечно, предполагая, что d может содержать как минимум столько символов, сколько ptr.

0 голосов
/ 02 октября 2009

раскручивать точно правильно. Вам не нужно ничего делать перед strcpy (). Однако, если вам позже понадобится инициализировать некоторую память для определенного шаблона, вы можете использовать это:

void* pointerToMemory;          // Initialize this appropriately
unsigned char initValue = 0;    // Or whatever 8-bit value you want
size_t numBytesToInitialize;    // Set this appropriately

memset(pointerToMemory, initValue, numBytesToInitialize);
0 голосов
/ 02 октября 2009

memset (д, 0, 90)?

...