2016-08-24 2 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. 내가 다른 빈 문자열 배열 & str3str2를 선언하는 경우, 그들은 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

_ "그 코드를 보았습니다."_ 정확한 코드를 보여주지 않으면 _ 우리에게 도움이되지 않습니다. – Michael

답변

0

나는 임시 포인터이기 때문에 당신의 오류라고 생각하면 (문자열로 숯불을 사용 배열) strcpy(str1[j],temp)를 호출하면 문제가있는 것 같습니다.

또한 온라인 솔루션은 * 임시 포인터를 사용하지 않으며 배열을 사용합니다.

+0

문제는'temp'가'char *'포인터이기 때문에'temp'가 초기화되지 않았기 때문이 아닙니다. – ameyCU

+0

문자열 배열로 초기화하는 방법은 무엇입니까? 나는 그것을 int와 char로 초기화하는 방법을 안다. –