weemiee
@weemiee (weemiee)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【C言語】"%1ld" って何?

Q&A

Closed

以下のサイトの、strchr関数の使用例で示されたプログラムにおける、char*型とchar型 (文字列) の減算「p-s」の部分について質問です。

上のサイトでは「p-s」の出力フォーマット指定子を "%d" として出力していたのに対し、次のプログラムで「p-s」と同じタイプ「p-str」の指定子を "%d""%1d" にするとコンパイルエラーになり、"%1ld" でようやく動かせました。

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

int main(){
	char str[] = "abc@fghijk";
	char* p = strchr(str, '@');
	if(p != NULL){
		printf("「@」の位置:str[%1ld]\n", p-str);
	}
}

"%1ld" という指定子自体は、webで検索してもなかなか見つかりません。エラーメッセージで指摘されて初めて知ったので、特徴や使う場面も分からずにいます。どなたか、"%1ld" の意味や仕組みを教えて頂けないでしょうか?

※一応、一見似ている指定子 "%ld" の説明には目を通していて、その役割「倍精度整数(?)を10進数で出力」の意味が分からなくてギブしました。

0

3Answer

最低1桁 long decimal
アドレス差分を表示しようとしていて、long(倍制度整数)の値なので、l を指定。
最低1桁にはなるので、1は指定しなくても同じ結果になります。
d (decimal) を x (hexadecimal) に変更すれば16進数で表示します。

1Like

"C言語 書式指定" とかで検索すると、色々出てきます。
判り易いのはこちらあたりでしょうか。

cppreferenceは、非常に詳細な説明が記載されています。

Microsoftのドキュメントも詳しいですが、VC++独自仕様の説明も含まれるので注意が必要です。

0Like

Comments

  1. > ※一応、一見似ている指定子 "%ld" の説明には目を通していて、その役割「倍精度整数(?)を10進数で出力」の意味が分からなくてギブしました。

    一つのサイトだけじゃなくて、検索して色々なWebサイトを見た方がいいですよ。
    エンジニア志望とのことですが、エンジニアの基礎能力は調査力による所が大きいです。人に聞くのは疑問の解決手段の一つではありますが、それで解決した場合、調査力は向上しません。簡単な事は、可能な限り自力で調べてみましょう。

@shiracamusさん、ご回答ありがとうございます。
1という数字がずっと謎だったので、この文字をつける意味を大体でも把握出来て良かったです。

0Like

Your answer might help someone💌