LINUX.ORG.RU

Как strchr может возвращать истину на символ не из списка?

 


0

1

Сабж:

// SYMBOL
	else if (strchr(",.:%$", CHAR_CURR) != NULL) {
		char ch = CHAR_CURR;
		TOK_COPY;
		TOK_ZERO;
		switch (ch) {
			case ',': TOK_TYPE = TOK_SB_COMA; break;
			case ':': TOK_TYPE = TOK_SB_COLN; break;
			case '.': TOK_TYPE = TOK_SB_DOT; break;
			case '%': TOK_TYPE = TOK_SB_AMP; break;
			case '$': TOK_TYPE = TOK_SB_DOL; break;
		}
		printf("symbol\n");
	}
Хавает табы и/или переводы строк.

Исходник: http://paste.debian.net/101460/

gcc main.c -o asm

Кормить этим: http://paste.debian.net/101461/

asm test.asm out.bin

Deleted

Последнее исправление: cetjs2 (всего исправлений: 3)

написанному верить

#!/bin/bash

gcc -x c - <<EOF
#include <stdio.h>
#include <string.h>
int main() {
  char *ptr, *res, ch, a[] = ",.:%$\t\r";
  for(ptr=a;*ptr;ptr++)
  {
    ch = *ptr;
    res = strchr(",.:%$", ch);
    printf("%p 0x%02x\n", res, ch);
  }
  return 0;
}
EOF

anonymous
()

возвращать истину

символ не из списка

Упрлс? man 3 strchr

edigaryev ★★★★★
()
#include <stdio.h>
#include <string.h>

int main(void)
{
    char CHAR_CURR = '\n';
    char CHAR_CURR2 = '\t';
    char *str=",.:%$";

    if (strchr(str, CHAR_CURR) != NULL && strchr(str, CHAR_CURR2) != NULL)
    {
        printf("symbol\n");
    }
    return 0;
}

dron@gnu:~$ gcc main.c 
dron@gnu:~$ ./a.out 
dron@gnu:~$ 
Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)
Ответ на: комментарий от RisuX3

взял и интригу всю сломал со своим #define

#!/bin/bash

gcc -x c - <<EOF
#include <stdio.h>
#include <string.h>
#undef NULL
#define NULL (char*)1
int main() {
  char *ptr, *res, ch, a[] = ",.:%$\t\r";
  for(ptr=a;*ptr;ptr++)
  {
    ch = *ptr;
    res = strchr(",.:%$", ch);
    printf("%p 0x%02x", res, ch);
    if(res!=NULL)
      printf(", catch...");
    printf("\n");
  }
  return 0;
}
EOF

anonymous
()
Ответ на: комментарий от Deleted

Проверь ёщё раз внимательно, в ином случае версии ПО выкладывай.

Dron ★★★★★
()
Ответ на: комментарий от Deleted

Извиняюсь, невнимательно прочитал. Ну, кто знает. Вот в оффтопике, sqrt не возвращает EDOM при аргументе <0, а glibc возвращает.

RisuX3
()
Ответ на: комментарий от Deleted

Ну я же делаю проверку на NULL.

Показывай код полностью или его часть, которую можно скомпилировать без внесения изменений.

edigaryev ★★★★★
()
Ответ на: комментарий от Deleted

символ - 0

printf("symbol %02x, %c\n", ch, ch);
и
#define uint32_t unsigned int
#define uint16_t unsigned short
#define uint8_t unsigned char
в
#include <stdint.h>

anonymous
()
Ответ на: комментарий от Deleted

http://hashcode.ru/questions/76052/c-strchr-как-она-работает

Илья Михневич, обратите внимание, что strchr (str,0) вернет адрес завершающего строку нуля, а не NULL (хотя по определению строки не содержат двоичных нулей (!)).

anonymous
()
Ответ на: комментарий от Krieger_Od

А, так вы тут обкурились все, и strchr(s, 0) делаете?

И почему же нельзя делать strchr(s, 0)? По-моему «обкурился» в лужу здесь только ты, неправильно распарсив цитату анонимуса несколькими постами выше.

edigaryev ★★★★★
()

Слушай, чувачело, ты реальный звиздец. Тебе с твоими знаниями прямая дорога в ВНИИ какое-нибудь. Там много таких.

deterok ★★★★★
()
Ответ на: комментарий от deterok

Депревация сна не труЪ, от нее минусов больше чем плюсов.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.