2012-01-17 9 views
3

私はCプログラミングの初心者です。 私はこの問題を理解していません。 Windows下の文字列は、Linuxとはまったく異なる方法で扱われているようですが、なぜですか?文字列処理CのLinuxとウィンドウ

・タントの私のコード

#include <stdio.h> 
#include <string.h> // compare strings 
void addextname(char *str1, char *str2, char *nome1){ 
    int i,j; 
    i = 0; 
    while (str1[i]!='.') { 
     nome1[i] = str1[i]; 
     i++; 
    } 
    j = 0; 
    while (str2[j]!='\0') { 
     nome1[i] = str2[j]; 
     i++; 
     j++; 
    } 
} 

int main() 
{ 
    char str1[9]="file.stl"; 
    char str2[9]="name.stl"; 
    int len1 = strlen(str1); 
    int len2 = strlen(str2); 
    char nome1[len1+len2+1]; 
    addextname(str1,str2,nome1); 
    printf("%s %s %s\n",str1,str2,nome1); 
    return 0; 
} 

私の目的は、その拡張子(.STL)内の入力ファイル名を読み、それがその拡張子を維持するには、いくつかの文字を追加することです。 Linuxでは、問題はありません。ウィンドウの代わりに、出力ファイル名が正しく保存されません。 マイコンパイルラインは、私は本当にそれに対する答えを感謝

gcc modstr.c -std=c99 -o strings 

です!

+0

コードは以前のように見えるので、@ iaoを編集しました – Nicholas

+0

コードブロックを2つの別々のものに分割する括弧でインデントの問題があります。ちょうど良いフォーマットのために:) – qiao

+0

@喬ええ!私はそれが私のコード上にあったと思ったが、後で答えが下にあると思った。 – Nicholas

答えて

10

ゼロ終了していません。nome1です。試してみてください:

nome1[i] = 0; /* After the second while. */ 
+2

...そしてwhile(str1 [i]!= '。') 'を' while(str1 [i]! = '。' && str1 [i]!= '\ 0') 'それ以外の場合は、拡張子なしのファイル名を最初の引数として渡すとaddextnameがクラッシュします。 – Axel

+2

ファイル名に複数のピリオドを含めることができるので、右から検索を開始する必要があります。 –

+2

@Axel、Ignacio良い呼び出し:-)あるいは単に 'strrchr'を使うだけですか? – cnicutar

0

お客様は、nome1という配列を作成しましたが、何も付属していません。それは霊的ですか?

+0

私はちょうどnome1のメモリアドレスを初期化しました。そして、addextnameには、そのメモリアドレスを "埋め"ます。私は正しい? – Nicholas