こんにちは、私はC言語の世界では新しく、コードについては本当に奇妙なことがあります。目的は、始まりと終わりにスペースやタブで文字列をトリミングできる関数を作成することです。私はString libを使用することはできません。C:printfのあるコードと別のコードのコードとの差異
問題は、単にテストのための私のコードでprintf関数であり、それは非常によく仕事をしていることです。しかし、私はそのprintfを削除する場合、関数が正しく動作しません...誰も私を喜ばせることができますか?
#include <stdio.h>
short trim(short idx,char*str,short dir){ //gives the index to trim
while(*(str+idx)==' ' || *(str+idx)=='\t')
idx+=dir;
return idx;
}
short findEnd(char *str){ // find the end of the string
int ret=0;
while(*(str+ret)!='\0')ret++;
return ret-1;
}
char *strtrim(char *str){ //The function that trims the string
short begin=trim(0,str,1);
short end=trim(findEnd(str),str,-1)+1;
char ret[end-begin];
for (short i=begin; (i-begin)<sizeof(ret);i++){
ret[i-begin]=*(str+i);
printf("%d\n",i);// <--------------------------------this is the printf
}
char *c=&ret[0];
return c;
}
int len(char *str){// return the length of the given string
int ret=0;
for(int i=0;*(str+i)!='\0';i++){
printf("%d %c\n",i,*(str+i));// another printf for testing porpuses
ret=i;
}
return ret;
}
int main(){
char *str=" this is a great test to test your testing skills ";
printf("%d\n",len(strtrim(str)));
}
できるだけのprintfは、このような違いがどのように:
ここでは、コードですか? printfを使うと毎回printfを使いますが、printfを使っていないと私はそれを実行していますが、いつも間違っています。
'strtrim'はローカル変数へのポインタを返します。 –
[ローカル変数のメモリはそのスコープの外部にアクセスできますか?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) –
退職した忍者はあなたの返信に感謝します。はいstrtrimはポインタを返します(そのミスには申し訳ありません)。しかし、私の質問は、ローカル変数メモリ(私は思う)とは全く関係がありません。私はそれを実行するたびにうまくいっていますが、その単一のprintfがなければすべてが間違っています。 –