私は2つのコードを持っています。一つは動作し、もう一つは動作しません。最初の部分は、charポインタがローカル割り当てから返された後でも有効であるかどうかを調べるテストに過ぎませんでした。返却時にローカル割り当てを割り当て解除することを決めるのは何ですか?
char* test(){
char* rawr="what";
return rawr;
}
をしかし、この1つは動作しません::この作品何らかの理由で
char* folderfromfile(char* filz) //gets the folder path from the file path
{
//declarations
int lastslash=-1;
int i =0;
char rett[256];
for(i;(int)filz[i]!=0;i++)
if(filz[i]=='\\')
lastslash=i; //records the last known backslash
if(lastslash==-1)
return ""; //didn't find a backslash
for(i=0;i<=lastslash;i++)
rett[i]=filz[i]; // copies to new string
rett[i] =0; //end of string
cout << &rett << "====" << rett << endl;
system("pause>nul");//pause so i can watch over the memory before it deallocates
return rett;
}
私は完全なパスからファイル名を削除するこのタスクを達成するためのより良い方法があることを賭けたが、今のところ、私はちょうどなぜこのcharポインタが他のものが削除されているのか把握しようとしています。もし私が推測しなければならないのは、私がそれを違うと宣言したか、その大きさのためだと言うだろう。はい、私はこの関数の引数として別のcharポインタを渡すことができますが、それは私の質問に答えることはできません。
コンパイラによって '' what ''がスタックの外側に配置されるため、最初は*動作します。定数でない文字列を使うか、あるいは単にコンパイラ、アーキテクチャ、コンパイラのフラグを変更すると、それを変更することができます。そのような壊れたコードを書くことさえ考えないでください。 – delnan
関連しないメモでは、実際には1行に1つのステートメントを書く必要があります。だけでなく、それは大幅に読みやすさを向上させるだけでなく、特にブレークポイントになると、デバッグをはるかに簡単になります。 –
これは私が見た中で最も醜いコードのいくつかでした。空白はあなたの友人です。コードを読むのが簡単であれば、人々はあなたを助けてくれるでしょう。 –