2017-10-11 6 views
0

マニュアルの第2章(http://man7.org/linux/man-pages/dir_section_2.html)で説明しているLinuxシステムコールのみを使用してstdoutに書き込もうとしています。Linuxシステムコールでフォーマット指定子を使用する

ssize_t write(int fd, const void *buf, size_t count); 

私が使用しようとしている機能ですが、フォーマット指定子をバッファに組み込むことを試みています。理想的には、次のように動作します。

char *adjective = argv[1]; 
write(1, "This is a %s example\n", adjective, 19 + strlen(adjective)); 

しかし、明らかにこれを行うことはできません。どのように似たようなことをやっていくのですか?

また、私はstrlen()がLinuxシステムコールのセクション2の一部ではないことを知っています。私はバッファの長さを数えることは私の質問の一部ではないので、簡単にするためにそれを含めています。

char buffer[BUFSIZE]; 
int size = snprintf(buffer, BUFSIZE, "This is a %s example\n", adjective); 
write(STDOUT_FILENO, buffer, strlen(buffer)); 

あなたがsprintf()を使用できない場合は、単に個別の文字列を書く:あなたは、書き込みバッファ、にフォーマットする

答えて

0

使用sprintf()

write(STDOUT_FILENO, "This is a ", sizeof "This is a "); 
write(STDOUT_FILENO, adjective, strlen(adjective)); 
write(STDOUT_FILENO, " example", sizeof " example"); 
+0

残念ながら、この割り当てでは、Linuxマニュアルのセクション2にないので、snprintf()を使用することはできません。 – adhdj

+0

次に、書式指定子を使うことはできません。これらは 'printf()'関数群の一部です。 – Barmar

+0

Gotcha!私はそれをすることができないと思っていた。ありがとうございました! – adhdj

関連する問題