2016-09-13 10 views
-2

私は結果をchar **で取得したいが、その結果は1つの文字にすぎないのはなぜですか? return char *を使用してこの問題を解決したくありません。誰が私に教えることができますか?C char **結果を得る

void test() { 
    char A[] = "123,563"; 
    char *result = (char *)malloc(5*sizeof(char)); 
    addStringAtoB(A, &result); 
    printf("\n result :----- %s \n", result); // result is not all, but one point ? 
} 

int addStringAtoB(char string[], char **result) { 
    char* token = strtok(string, ","); 
    char *stringA; 
    if (token != NULL) { 
     stringA = token; 
     token = strtok(NULL, ","); 
    } 
    char *stringB; 
    if (token != NULL) { 
     stringB = token; 
    } 

    int lenA = strlen(stringA); 
    int lenB = strlen(stringB); 
    int len = lenA < lenB ? lenA : lenB; 
    char resultTem[1000] = {}; 
    for (int i=0; i<len; i++) { 
     char a = stringA[i]; 
     char b = stringB[i]; 
     if (a >='0' && a <= '9' && b >='0' && b <= '9') { 
      int c = (int)(a - '0') + (int)(b - '0'); 
      resultTem[i] = c + '0'; 
     } 
     else { 
      *result = "error"; 
      return 0; 
     } 
    } 

    if (len == lenA) { 
     for (int j=len; j<lenB; j++) { 
      resultTem[j] = stringB[j]; 
     } 
    } 
    else if (len == lenB) { 
     for (int j=len; j<lenA; j++) { 
      resultTem[j] = stringA[j]; 
     } 
    } 
    **result = *resultTem; 
    return 0; 
} 
+0

[このサイトの質問方法](https://stackoverflow.com/help/asking)をお読みください。 – WhozCraig

+0

は '** result = * resultTem; 'のため – BLUEPIXY

+0

型では、最後のアスタリスクは「先行するポインタ」を意味します。したがって、 'char **'は実際にはcharへのポインタへのポインタです。 C文字列またはchar配列 'char *'は、実際には配列内の最初の文字へのポインタです。 'char **'はその最初のcharへのポインタへのポインタに過ぎません。 – CodeMouse92

答えて

0

あなたの質問は明確ではなく、明確に定義されていません。

私はあなたの質問に答えるだけで十分であると考えられる方法で少しコードを配置しました。とにかく、私はあなたのコードの正しさのコントロールをあなたに残しました。

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

int addStringAtoB(char string[], char **result) { 
    char* token = strtok(string, ","); 
    char *stringA; 
    if (token != NULL) { 
     stringA = token; 
     token = strtok(NULL, ","); 
    } 
    char *stringB; 
    if (token != NULL) { 
     stringB = token; 
    } 

    int lenA = strlen(stringA); 
    int lenB = strlen(stringB); 
    int len = lenA < lenB ? lenA : lenB; 
    char resultTem[1000] = {}; 
    int i=0; 
    for (; i<len; i++) { 
     char a = stringA[i]; 
     char b = stringB[i]; 
     if (a >='0' && a <= '9' && b >='0' && b <= '9') { 
      int c = (int)(a - '0') + (int)(b - '0'); 
      resultTem[i] = c + '0'; 
     } 
     else { 
      *result = "error"; 
      return 0; 
     } 
    } 

    if (len == lenA) { 
     int j=len; 
     for (; j<lenB; j++) { 
      resultTem[j] = stringB[j]; 
     } 
    } 
    else if (len == lenB) { 
     int j=len; 
     for (; j<lenA; j++) { 
      resultTem[j] = stringA[j]; 
     } 
    } 
    *result = resultTem; 
    return 0; 
} 

int main() { 
    char A[] = "123,563"; 
    char *result = (char *)malloc(5*sizeof(char)); 
    (void)addStringAtoB(A, &result); 
    printf("\n result :----- %s \n", result); // result is not all, but one point ? 
    return 0; 
} 
+0

ありがとうございます。しかし、ご存じのように、私は頼りにならないことをあまりにも短くすることはできません。 – Semyon