2016-08-24 6 views
-1

私は配列で作業しています。文字列配列と関数と他のビットを文字列とints配列で打ちました。strcpy with strings array

は今、私は私がやったことstrcpy、との問題を抱えていると知りたい:

  1. それは私がstrcpy(temp, str1[i]);ながらtempchar *tempで割り当てた場合にクラッシュします。
  2. 単一文字列temp[100]。しかし、私は配列の文字列要素にtempのサイズを計算する方法を理解していませんでした。私はtempのサイズとして17を与えなければならないことを理解しましたので、文字列配列からバイトを合わせてください。 のように: char *temp[17];strcpy(temp, str1[i]); ここで*str1[] = {"sweepsweepsweepsweep"} 20文字です。そして、サイズが16でクラッシュします。

  3. stings配列のメンバーを別のメンバーに割り当てることはできません。 しかし、私はそれを行う一つのコードを見た。

  4. 私は他の空の文字列配列str2 & str3を宣言した場合、彼らはstr1と同じ値を持っている理由であるもう一つは?これは、コード例の最後に含まれています。

これは私のコードです:

#include <stdio.h> 
#include <string.h> 
#include <stdint.h> 

int main() 
{  
    int m = 0, j = 1, n, i; 
    char *str1[] = {"sweep", "forward"}, *str2[] = {}, *str3[] = {}, *temp; 
    uint8_t cnt = sizeof(str1)/sizeof(str1[0]); 

    if (strcmp(str1[m], str1[j]) > 0) { 
     strcpy(temp, str1[m]); 
     strcpy(str1[m], str1[j]); 
     strcpy(str1[j], temp); 
     printf("OK\n"); 
    } else { 
     printf("NOPE\n");  
    } 
    printf("The sorted string\n"); 
    for (i = 0; i < cnt; i++) 
     puts(str1[i]);  
    printf("%d\n", strcmp(str1[0], str1[1])); 
    printf("-----------------\n"); 

    printf("temp: %s\n", temp); 
    printf("str2: %s\n", str2[0]); 
    printf("str3: %s\n", str3[0]); 
    return 0; 
} 

コード例オンラインから:

#include<stdio.h> 

int main(){ 
int i,j,n; 
char str[20][20],temp[20]; 
puts("Enter the no. of string to be sorted"); 
scanf("%d",&n); 
for(i=0;i<=n;i++) 
    gets(str[i]); 
for(i=0;i<=n;i++) 
    for(j=i+1;j<=n;j++) 
    { 
     if(strcmp(str[i],str[j])>0) 
     { 
      strcpy(temp,str[i]); 
      strcpy(str[i],str[j]); 
      strcpy(str[j],temp); 
     } 
    } 
printf("The sorted string\n"); 
for(i=0;i<=n;i++) 
    puts(str[i]); 
return 0; 
} 
+1

どこでも「temp」は初期化されていません。あなたはどこでも指していないポインタを読み書きするだけではいけません。 – Michael

+1

同じものが 'i'になります。これは最初に初期化しないでインデックスとして使用しようとします。 – Michael

+1

_「あなたが私たちに正確なコードを提示しない限り、私はそれをする1つのコードを見ました。 – Michael

答えて

0

私は、一時はポインタであり、あなたは、文字列(charとしてそれを使用するので、あなたの誤差があると思います配列) strcpy(str1[j],temp)を呼び出すと、どこに問題があると思いますか?

また、オンラインソリューションでは* tempポインタを使用していないので、配列を使用しています。

+0

問題は 'temp'が' char * 'ポインタだからではなく、' temp'が初期化されていないからです。 – ameyCU

+0

これを文字列配列に初期化する方法は?私はそれをintとcharに初期化する方法を知っています。 –