2016-08-24 97 views
-1

我正在使用數組,我已經完成了將字符串數組傳遞給函數和其他位與字符串和ints數組打交道的位。strcpy與字符串數組

現在,我有strcpy,我做了什麼問題,想知道:

  1. 它與崩潰如果我給你strcpy(temp, str1[i]);tempchar *temp
  2. 單串陣列temp[100]。但是,我沒有弄清楚如何計算temp到數組的字符串元素的大小。我明白我必須給出17作爲temp的大小,以適應字符串數組中的字節。 Like: char *temp[17];然後,我可以申請strcpy(temp, str1[i]); 其中*str1[] = {"sweepsweepsweepsweep"} 20個字符。和大小爲16的崩潰。

  3. 我不能將一個成員的蜇數組分配給另一個成員。 但我看到了一個代碼。

  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

_「我看到一個這樣做的代碼」,除非您向我們展示確切的code_,否則對我們沒有任何幫助。 – Michael

回答

0

,我認爲你的錯誤是因爲溫度是一個指針,你使用它作爲一個字符串(CHAR array) 當你打電話給strcpy(str1[j],temp),我認爲是問題所在。

另請注意,在線解決方案不使用* temp指針,它使用數組

+0

問題不是因爲'temp'是'char *'指針,而是因爲'temp'沒有被初始化。 – ameyCU

+0

如何將它初始化爲一個字符串數組?我知道如何將它初始化爲int和char。 –