2012-03-12 3 views
2

내가 메타 C 언어, PHP의 기본, 짧은 시간과 HTML에서 오는, C로 시작하고, 캐스트없이 포인터의 정수를 만드는경고 : 할당 세그먼트 오류

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

compare(const void * a, const void * b){ 
    return (*(int*)a - *(int*)b); 
} 

int main(){ 

    int arr_size = 10; 

    int j; 

    char array[arr_size][2]; 
    char str[50]; 
    char output[50]; 

    // fill the array with string and random integers 
    for (j=0; j<arr_size; j++) { 
     strcpy(str, "array"); 
     array[j][0] = str;  //i've should put *str 
     array[j][1] = rand() % arr_size+1; 
    } 

    // print the array 
    for (j=0; j<arr_size; j++) { 
     strcpy(str, ""); 
     strcpy(output, ""); 
     sprintf(str, "%u", array[j][0]); // %u should be %s but return me segmentation fault 
     strcat(output, str); 
     strcat(output, " "); 
     sprintf(str, "%i", array[j][1]); 

     strcat(output, str); 
     printf(output); printf("\n"); 
    } 

    printf("\n"); 

} 

이 전체 코드입니다, 내가이전 *을 둘 필요가

array[j][0] = str; 

sprintf(str, "%u", array[j][0]); 

보고경고 메시지를 전달하지만 어떤 포인터도 선언하지 않았습니다. 왜이 해결책?

%u%s으로 변경하면 세분화 오류가 반환됩니다. 무엇이 문제입니까?

+2

가 C에 대한 좋은 프로그래밍 책을 읽기 이후

또한, sprintf(str, "%s", array[j]);을 할 수없는 몇 분에 C를 설명하기 때문에 (당신은 포럼에보다 더 좋은 설명을 얻을 것이다 불가능)하고 디버거를 사용하는 법을 배웁니다. –

+0

몇 가지 참조를 제안 할 수 있습니까? 사실 geany를 사용하고 있습니다 :-) – DreamIt

+1

@sataranjasvami, http://stackoverflow.com/tags/c/info –

답변

0

array[j][0]char입니다. char 배열을 할당 할 수 없습니다. *str은 단순히 str의 첫 번째 문자이므로이 지정이 유효합니다.

같은 이유로이 문자는 %s으로 인쇄 할 수 없습니다.이 지정자는 단일 문자가 아닌 널 종료 문자열을 인쇄하는 데 사용됩니다. 그렇지-NUL 종료/

+0

"char 배열을 할당 할 수 없습니다", ok. % c를 사용하여 결과를 보았습니다. 어떤 방법으로 문제를 해결해야합니까? 문자열 2 차원 배열이 필요합니다. – DreamIt

+0

'char'의 null로 끝나는 배열에 대한 포인터를 문자열로 생각할 수 있습니다. 당신은'strdup'을 사용하여 그것을 만들 수 있습니다. BTW, 문자열의 양방향 배열은 C++에서'std :: vector '처럼 쉬울 것이므로 C++가 더 편할 수 있습니다. –

+0

그것은 C++이 문자열로 끝났다고 생각합니다. – DreamIt