Сделать строку нулевой в одной строке - PullRequest
5 голосов
/ 14 августа 2010

Чтобы сделать строку пустой строкой, я написал это:

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char str[15]="fahad uddin";
    strlen(str);
    puts(str);
    for(int i=0;str[i]!='\0';i++)
        strcpy(&str[i],"\0") ;
    puts(str);
    getch();
    return 0;
}

До этого я пытался:

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    char str[15]="fahad uddin";
    strlen(str);
    puts(str);
    for(int i=0;str[i]!='\0';i++,strcpy(&str[i],"\0"))
        ;
    puts(str);
    getch();
    return 0;
}

В первом примере программа работает нормально, тогда как во втором примере она печатает первую букву строки (в этом примере F). Почему это?

Ответы [ 5 ]

10 голосов
/ 14 августа 2010

Строки C заканчиваются нулем. Пока вы используете только функции, принимающие строки с нулевым символом в конце, вы можете просто обнулить первый символ.

str[0] = '\0';
8 голосов
/ 14 августа 2010
memset(str,0,strlen(str)); /* should also work */
memset(str,0,sizeof str); /* initialize the entire content */
5 голосов
/ 14 августа 2010

for(int i=0;str[i]!='\0';i++,strcpy(&str[i],"\0")); - i ++ увеличивает i до выполнения strcpy - поэтому он будет принимать адрес str [1] на первой итерации - пропуская через str [0] - следовательно, вы получите первый символ.

Обратите внимание, что ответ KennyTM - гораздо лучший способ сделать это, но я думаю, вы изучаете / экспериментируете.

3 голосов
/ 14 августа 2010

Поскольку i++,strcpy(&str[i],"\0") оценивает i++ до того, как он оценивает вызов на strcpy(), который использует теперь увеличенное значение i в качестве пункта назначения.В сущности, он пропускает первый символ вашей строки.

Обратите внимание, что есть гораздо лучшие способы сделать то, что вы хотите.

KennyTM упомянул только установку первого символа на '\0' с помощью str[0] = '\0';, который не очищает каждый байт, но помечает строку как имеющую нулевую длину.

Существует также memset(), который используется для заполнения блока памяти любым произвольным значением, и 0, безусловно, являетсяпозволено.

Более того, вызов strcpy() гораздо менее эффективен, чем просто присвоение каждому элементу str[] в цикле.

0 голосов
/ 14 августа 2010

Попробуйте с этим кодом:

bzero(string_name, size_of_string);

Также включите файл <string.h> lib. Я думаю, что это должно работать.

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