2017-01-19 3 views
2

ファイルから読み込んだ特定の文字列にprintfやその他の関数を適用します。私は特定の条件の下で最初の5文字を​​スキップしたい。文字列の右端のみを出力する

if (strlen(nav_code) == 10) {nav_code = 5+nav_code;} 

が、コンパイラはこれを拒否::今の条件は5で文字列ポインタを高め、適用する場合、私は、によって巧妙であると考え

error: assignment to expression with array type

私は何を誤解していますか?とにかく私のアイデアを働かせるにはどうすればいいですか?

+1

スタディC配列(特に文字列)から始める必要があります。その後、このような「難しい」操作を行うことができます。 – honzakuzel1989

答えて

6

nav_codeはポインタではなく、char nav_code[50]のような文字配列である可能性があります。以下試してください:あなたは、あなたが最初の5つの文字をスキップすることができ、その後必ず必要なすべてのものです

char nav_code[50]; 
char *nav_code_ptr = nav_code; 
if (strlen(nav_code_ptr) == 10) {nav_code_ptr += 5;} 
// forth on, use nav_code_ptr instead of nav_code 
+0

Stephan、nav_codeの性質を文書化してくれなかったことに感謝し、謝罪します。それはあなたが思うように正確に宣言されます。私の無知を許していますが、あなたの解決策はどのように進んでいますか?私。以前はprintf( "%s \ n"、nav_code)を書いていましたが、どのようにnav_code_ptrを適用しますか? –

+0

(編集された)回答のコメントを参照 –

+0

魅力的な作品! )患者の説明をありがとう、Jonathan Livingstone Seagullはもう一度学びました;) –

0

コードでは、nav_codeは配列であり、配列はに割り当てられます。にはできません。

代わりに、ポインタを使用して、配列の最初の要素のアドレスで初期化し、ポインタにポインタ演算を行い、更新された結果をポインタに戻して戻します。

1

I am applying printf and/or other functions to a certain string of characters, read from a file. I want to skip the first 5 characters under certain conditions.

printf場合。 nav_code考える

は、文字列(char配列、またはcharポインタのいずれか)、次のとおりです。もちろん

printf("%s", nav_code + 5); // skip the first 5 characters 

、あなたの文字列が5つの以上の文字を持っていることを確認する必要があり、それ以外の場合は、アウトオブとして違法フラットアウトですアクセス

+0

「正しい切り捨て」は特定の条件の下でのみ適用されるため、この特定の状況では機能しますが、この状況では役に立ちません。そのため、ポインタを関数に適用する前にポインタを修正しようとしています。 –

関連する問題