URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5796
[ Назад ]

Исходное сообщение
"Простенькая прога "

Отправлено Elyad , 10-Окт-06 10:03 
Помогите отладить простенькую прогу.
Надо содержимое буфера сравнить с 0x01 и записать yes  в случае совпадения.
    char s[2];
    int n=0x01, d;
    
    strcpy(s,"0x01\n");
    d=atoi(s);
    if (d==0x01)  puts("yes");
    else puts("no");

   или
    char s[2];
    strcpy(s,"0x01\n");
    if (s[0]==0x01)   puts("yes");
    else puts("no");
     почему все время при запуске выдает  :   no


Содержание

Сообщения в этом обсуждении
"Простенькая прога "
Отправлено Sloboda , 10-Окт-06 10:33 
>    strcpy(s,"0x01\n");

Кажись, не так кладёшь. Нужно strcpy(s,"\001\n");


"Простенькая прога "
Отправлено NuINu , 10-Окт-06 10:44 
>Помогите отладить простенькую прогу.
>Надо содержимое буфера сравнить с 0x01 и записать yes  в случае
>совпадения.

попробуй так strcpy(s,"\001\n");

тока у тебя все равно будет переполнение буфера ;-)))


"Простенькая прога "
Отправлено Sergey , 10-Окт-06 11:13 
>Помогите отладить простенькую прогу.
>Надо содержимое буфера сравнить с 0x01 и записать yes  в случае
>совпадения.
>    char s[2];
>    int n=0x01, d;
>
>    strcpy(s,"0x01\n");
длина этой строки будет 5 байт.
>    d=atoi(s);
>    if (d==0x01)  puts("yes");
>    else puts("no");

все это в корне не верно.

>
>   или
>    char s[2];
>    strcpy(s,"0x01\n");
>    if (s[0]==0x01)   puts("yes");
тут идет сравнение первого байта, который равен коду символа '0'

>    else puts("no");
>     почему все время при запуске выдает  
>:   no

1. Вы не понимаете различия типов данных char* и int. Читайте доку.
2. Если вы хотите сравнить строки, нужно использовать ф-ю strcmp, а не оператор сравнения. Если хотите использовать оператор ==, то вам нужно строку будет переводить в тип int.


"Простенькая прога "
Отправлено Sergey , 10-Окт-06 11:43 
Уточню немного:

>>Помогите отладить простенькую прогу.
>>Надо содержимое буфера сравнить с 0x01 и записать yes  в случае
>>совпадения.
>>    char s[2];
>>    int n=0x01, d;
>>
>>    strcpy(s,"0x01\n");
>длина этой строки будет 5 байт + 1 байт для символа 0x00.
>>    d=atoi(s);
>>    if (d==0x01)  puts("yes");
>>    else puts("no");
>

Фраза "все это в корне не верно" относится к нижеприведенному коду.

> все это в корне не верно.
>
>>
>>   или
>>    char s[2];
>>    strcpy(s,"0x01\n");
>>    if (s[0]==0x01)   puts("yes");
>тут идет сравнение первого байта, который равен коду символа '0'
>
>>    else puts("no");
>>     почему все время при запуске выдает  
>>:   no
>
>1. Вы не понимаете различия типов данных char* и int. Читайте доку.
>
>2. Если вы хотите сравнить строки, нужно использовать ф-ю strcmp, а не
>оператор сравнения. Если хотите использовать оператор ==, то вам нужно строку
>будет переводить в тип int.