내가 여기에 "어레이 인터페이스 예"절에 나와있는 예제 코드를 적용하려고 해요 알려져 있지 않은 경우C 프로그램 : 길이가 컴파일 시간
http://orclib.sourceforge.net/doc/html/group_g_bind.html
경우, 문자열의 배열을 설정하는 그들은 장소 사용 OCI_BindArrayOfStrings
에 문자열, tab_str
의 배열은 : 나는 프로그램이 실행될 때 데이터베이스에서이 길이를 다운로드해야하는 반면
char tab_str[1000][21];
...
OCI_BindArrayOfStrings(st, ":s", (char*) tab_str, 20, 0);
문제는, 위의 예는, 컴파일시에 배열의 길이를 알고있다.
OCI_BindArrayOfStrings(st, ":s", (char*) my_tab_str, 20, 0);
내 질문이 my_tab_str
을 설정하는 방법이다 : 그래서 my_tab_str
라고 문자열 배열을 만들고 다음 코드 줄에 배치하고 싶습니다?
int i, arraysize;
char person_name[20] = "";
char * my_tab_str;
...
strncpy(person_name, "John Smith", 19);
arraysize = <this value is downloaded from database>;
...
my_tab_str = malloc(arraysize * sizeof(char) * (strlen(person_name)+1));
for(i=0;i<arraysize;i++) {
strncpy(my_tab_str[i], person_name, strlen(person_name));
}
목표는의 각 요소에 (내가 컴파일러에 의해 자동으로 추가됩니다 생각) "존 스미스"(예를 들어 10 바이트) 플러스 널 종료 문자를 배치하는 것입니다 : 여기에 (gcc -std=C89
를 사용하여 컴파일) 내 코드입니다 캐릭터 라인 배열 my_tab_str
기능 OCI_BindArrayOfStrings
여기에 설명되어 warning: passing argument 1 of 'strncpy' makes pointer from integer without a cast /usr/include/string.h:131: note: expected 'char * __restrict__' but argument is of type 'char'
참고 :
내가 컴파일 경고를 받고 있어요
http://orclib.sourceforge.net/doc/html/group_g_bind.html#ga502cd4785691b17955f5d99276e48884
및 인수로 문자열의 배열을 기대하고있다. 예제 구현에 대해서는 위의 첫 번째 링크에있는 예제 코드를 참조하십시오.
좋은 질문 --- 원본 게시글을 'OCI_BindArrayOfStrings'정보로 업데이트했습니다. 첫 번째 링크에 표시된 예제가 의심 할 여지없이 명확 해지기를 바랍니다. 그것들은'(char *)'를 사용하여 그것을 던져 버린 것처럼 보입니다. 그 질문에 대답합니까? – ggkmath
@ggkmath : 흠, 1D 배열의 char이 필요하며 인수로 차원을 제공하는 것 같습니다. 기술적으로, 1D 포인터를 통해 2D 배열에 액세스하는 것은 정의되지 않은 동작입니다. 그러나 몇 분만 주시면 답변을 업데이트하겠습니다 ... –
원래 char ** my_tab_str'을 사용하여 코드를 작성했습니다 (그에 따라 조정 됨) 모든 것이 잘 컴파일됩니다. 하지만 OCILIB가 구문을 실행하려고하면 세그먼트 화 오류가 발생합니다. 나는 그것을 선언 할 때'my_tab_str'을'OCI_BindArrayOfStrings'에 넣으려고하면 행복하지 않다. – ggkmath