#include <stdio.h>
char *mystrcat(char *s1, char *s2);
int main(void)
{
char *s1,*s2;
s1="asdad";
s2="asdad";
s1=mystrcat(s1,s2);
printf(s1);
return 0;
}
char *mystrcat(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i]<'\0';i++) ;
for(j=0;s2[j]!='\0';j++) s1[i+j]=s2[j];
s1[i+j]='\0';
return s1;
}
答えて
最初の問題は、s1
にs2
を追加するのに十分な領域がないことです。 s1
で指されるバッファーのサイズは、少なくともstrlen(s1) + strlen(s2) + 1
(NULターミネーターである+ 1
)にする必要があります。
第2の問題は、文字列リテラルが読み取り専用であることです。 s1
を"asdad"
に割り当てると、(潜在的に)読み取り専用メモリへのポインタが作成されます。もちろん最初の問題は、書き込み可能であっても最後に追加するための十分なスペースがないことを意味しますが、これはCの一般的な落とし穴の1つであり、言及する価値があります。 (すでにanother answerで述べた)
第3の問題は、比較s1[i] < '\0'
が間違っていると、ループが1つでも反復処理を実行されませんので、あなたが正しくs1
の長さを見つけることができませんということです。正しい条件は、2番目のループの場合と同じです。!= '\0'
です。 (これは最初からs1
を誤って上書きしてしまったので、問題1をマスクします。)
"size of' s1' "に注意してください。 's1'は' char * 'なので、そのサイズはそれが指しているオブジェクトとは無関係です。 – EOF
@EOF Trueを修正しました。 – Arkku
ありがとう! 2番目の問題を解決するにはどうすればよいでしょうか? – Metalingus
少なくとも、s1[i] < '\0'
は同じですs1[i] < 0
として、常にfalseです。
'char'は' s2 [i] <0'を真にする 'signed'とすることができますか? –
FiddlingBitsは非常に良い点です:関係式が間違っていますが、指定した理由ではありません。たとえば、 '(int)(char)( - 1)'は私のプラットフォームで-1を返し、 '(int)(unsigned char)( - 1)'のように255になりません。同様に、 '(int)(signed char)( - 1)'が-1になる間に、別のプラットフォームでは前者の場合255(または別の値、すべての実装で2の補数を使用するわけではありません)という結果になります。コンパイラの中には、コンパイラフラグを介して 'char'を符号付きまたは符号なしにすることをサポートするものもあります。 'char'の署名度は、ISO C標準によって実装定義されたままなので、' s1 [i] <0'は常にfalseではありません。 –
- 1. 認識されていないセレクタがこんにちは</p> <p>(私はこの質問を何度も頼まれていたが、彼らは私の問題を解決しなかったことを知っている)のiOSチュートリアル
- 2. このコードで何が問題になっていますか? printfが印刷されていません
- 3. XMLデシリアライズが動作しない - XMLドキュメントに誤りがある(0、0)私は、XMLレスポンスをデシリアライズしようとしているが、私はこれらが私のクラスである</p> <p>ここで働いていないことを理解するように見えることはできません
- 4. プロジェクトオイラー問題8。私はこのコードでこの欠陥を見つけることができない。私は間違って何をしていますか?
- 5. ローバーそして、私は私がこれはローバーが可能なワンローバーオブジェクトを作っている私の主な機能である</p> <p>を考え出したことができない、単純な問題を抱えていた中で、ローバーの簡単なゲームを作っていますC#
- 6. 私はこれが私の問題がある <p></p> ...すでに質問をしているが、私は以前に尋ねた任意の質問から答えを得ることはありません知っているJavaScriptの
- 7. はTypeError:「int型のオブジェクトは、次のコード</p> <p>これが私の主な機能であると私は問題を抱えている
- 8. ASP.NET Ajaxのテキストボックスには、問題は私がクリックしたときに何が起こっていないです
- 9. Pythonはここ</p> <p>が私のコードであるഀ私はWindows7のマシンを使用していますし、Python 3が各行の末尾にこの文字を書いている理由を私は理解できないライン
- 10. ggplot2:私はこのどこかのソリューションを見てきましたかなり確信していますが、私はそれを見つけることができなかったとして、ここでは私の問題である
- 11. 私はこのコードで何が問題になっている:原因java.lang.NullPointerException
- 12. このiframeで何が問題になっていますか?現在、私はこれを使用してい
- 13. Gitリポジトリ:私たちは、作業がコミット持っている:私はこの質問を数回に答えてきたけど、これまでのところ、私が試したすべての投稿解決策が私のために動作しませんでした:(</p> <p>状況がある古いコミット
- 14. トップナビゲーションバーには、これは私が私のコードで<strong>3の問題を</strong>持っ</p> <p>:(私はナット運転している
- 15. カーソル状態が無効 - 私はこれについて多くのことを探してきたが、何も私の問題を解決していない
- 16. 私が書いたこの機能に何が問題なのですか?
- 17. このコード行で何が問題になっていますか?なぜそれがここで機能
- 18. コードは私が書いてきた、このコードに問題があり
- 19. このコードはエラーを示しています。このコードで何が問題になっていますか?
- 20. AndroidのWebViewのウィンドウは、私はWebViewのを使用して、私の大きなプロジェクトでは、この問題が発生しているが、私は自分のコードに何かを見つけることができなかったとき、私は2つだけのものが含まれている単純なプロジェクトを作っ
- 21. パングラム機能の私のコードで何が問題になっていますか?
- 22. 私はこの問題を理解していない
- 23. は、私は1つにしたいと示しボックスのようなものをので、これまでのFacebookとGoogle+ ...私は私にナットを駆動しているここで、シンプルでありながらハードな問題を持っているいくつかのURLでnoコード変更とApparantly</p> <p>を
- 24. 角度2の問題は、私がここで理解していないのです何
- 25. IOが、私はこのプログラムを持っている問題
- 26. ジキルは、はい、私はこの質問はすでに何回も頼まれました、と私は私が見つけることができるすべてのソリューションを適用しましたが、私はまだこの問題を持っていることを知っているGitHubのページ
- 27. は、私は私が何も起こりません結果をクリックしたときに問題がある、私はajaxlivesearch.com</p> <p>からlivesearch.com機能に含まれている検索バーを持っているjqueryの
- 28. 私はココアで、この問題を持っている機能
- 29. Javascriptをところで私はで新しいよ、私はボタン</p> <p>を提出クリックして、これまでのところ私は私の心にこのスクリプトを持っているときに、私は何のテキストボックスがいっぱいかどうかを確認したい、またはボタン
- 30. は、私は、Pythonに新しいですし、私は可能なドキュメントがたくさんある知っているが、私はこのことを理解することができませんはgetopt.getopt</p> <p>に捕まってしまったのpython
2)連結文字列を格納するスペースが 's1'にありません。 – BLUEPIXY
さらに、 'printf(s1)'ではなく 'puts(s1)'や 'printf("%s \ n "、s1)'を使うべきです。特に、文字列がコンパイル時定数でない場合、 'printf'の書式文字列として使用することは、書式指示子を含む場合には重大な問題です。 – Arkku