LINUX.ORG.RU

Как передать нулевой байт в середине строки(С)?


0

0

Как передать подпрограмме строку, в середине которой значимый(!) нулевой байт.

Имеем строку

<p> main() { char test[8];

test [0]='1'; test [1]='2'; test [2]='3'; test [3]=0; test [4]='V'; test [5]='T'; test [6]='1'; test [7]=0;

printf ("%s",test); } </p>

И всё было бы хорошо, если бы \0 не являлся признаком конца строки :) Поэтому на печать выводится не 123 VT1, а 123. Что, собственно, логично.

Подскажите, как с этим бороться.

★★

не понял а с чем ты решил бороться то?

lg ★★
()

мож стоит там не ноль ставить(признак конца строки) а 32 - код пробела?

anonymous
()

Если я правильно вас понял, то можно попробовать так:

#include <stdio.h>
#include <string.h>

void foo(char *buf, size_t len)
{
	/* Используйте buf и len для работы со строкой. */
	char *p1, *p2;

	p1 = p2 = buf;
	p2 = &buf[strlen(buf) + 1];

	printf("p1 = %s\n", p1);
	printf("p2 = %s\n", p2);
}

int main()
{
	char buf[8] = {'1', '2', '3', '\0', 'V', 'T', '1', '\0'};
	foo(buf, 8);
	return 0;
}

mgk
()

Наиши свою библиотеку для работы со строками которая 
не будет использовать \0 как признак конца строки.  
В C++ класс std::string вроде правильно обрабатывает 
такие строки, но неправильно печатает:


#include <string>
#include <iostream>

int main(int argc, char *argv[])
{
    std::string s;

    s = "123";
    s += '\0';
    s += "VT1";
    std::cout << s << std::endl;
    
    return 0;
}


На экран выдается 123

anonymous
()

>но неправильно печатает:
>На экран выдается 123

а ты вывод в файл направь, чтоб консоль не мешала :)
  

anonymous
()

lg привильно спросил
с чем бороться то?
Какой кончный результат ты хотел увидеть?
если "123 VT1", то замест '\0' подставь ' '

Dead ★★★★
()

Спасибо mgk. Эта задача действительно решается только при помощи передачи ДЛИНЫ строки. SUL.

P.S. Пишу telnet-клиент для RF терминала Intermec 2415.

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