초기화되지 않은 2중 배열을 서브루틴의 인자로 넘기고 싶습니다

chmod1234의 이미지

초기화되지 않은 2중 배열을 서브루틴의 인자로 넘겨 서브루틴이
배열을 초기화하게 하려고 만들었습니다.

제가 아는 포인터 상식으로는 이렇게 넘기면 주소가 넘어가는게 맞는데
자꾸 포인터 타입이 맞지 않는다고 하고 실행해보면 segment fault가 납니다
어떻게 수정을 해야하나요?

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

char startIp[] = "123.456.789.100";

int ipToken(char *inputIp, char **tokenIp);

int main() {

char token[4][4];
int ret;

printf("%u\n", token);
printf("%u\n", token[1]);
printf("%u\n", token[2]);
printf("%u\n\n", token[3]);
ret = ipToken(startIp, token);
if(ret <= 0) {
printf("error occur\n");

exit(0);
}

printf("1th : %s\n", token[0]);
printf("2th : %s\n", token[1]);
printf("3th : %s\n", token[2]);
printf("4th : %s\n", token[3]);

return 0;
}

int ipToken(char *inputIp, char **output) {

char temp[64];

strncpy(temp, inputIp, strlen(inputIp) + 1);

const char delimeter[] = ".";

sprintf(output[0], "%s", strtok(temp, delimeter));
sprintf(output[1], "%s", strtok(NULL, delimeter));
sprintf(output[2], "%s", strtok(NULL, delimeter));
sprintf(output[3], "%s", strtok(NULL, delimeter));

return 1;
}

new5244의 이미지

int ipToken(char *inputIp, char **tokenIp);

=>

int ipToken(char *inputIp, char tokenIp[][4]);

from saibi

k2hyun의 이미지

ret = ipToken(startIp, (char **)token);

요렇게 바꾸시고

sprintf((char *)output + 0, "%s", strtok(temp, delimeter));
sprintf((char *)output + 4, "%s", strtok(NULL, delimeter));
sprintf((char *)output + 8, "%s", strtok(NULL, delimeter));
sprintf((char *)output + 12, "%s", strtok(NULL, delimeter));

또는
sprintf((char *)(output + 0), "%s", strtok(temp, delimeter));
sprintf((char *)(output + 1), "%s", strtok(NULL, delimeter));
sprintf((char *)(output + 2), "%s", strtok(NULL, delimeter));
sprintf((char *)(output + 3), "%s", strtok(NULL, delimeter));

으로 해도 되는군요. 8)

p.s 흠, (output + 1) 방식으로 할 경우 buffer 크기가 4가 아니면 문제가 생기는군요. =3==3===3

더 이상 없다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.