C char** 得到结果

标签 c

我想通过char **得到结果,但是结果只有一个char,为什么? 我不想使用 return 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;
}

最佳答案

您的问题不清楚,也没有明确定义。

我对你的代码进行了一些排列,我认为它足以回答你的问题。不管怎样,我把代码的正确性控制留给了你。

#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;
}

关于C char** 得到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473873/

相关文章:

python - 结合两种不同的语言(不是你想的那样)

c - 缓冲区的指针与双指针

c# - c#如何在asp.net网页中显示C程序错误

无法使用 C 中的 write() 函数写入 .txt 文件

c - 正确释放分配的虚拟内存

c - 如何知道客户端是否已在套接字中终止

c - 使用 C 在终端中打印多字节字符

我可以强制 cmake 在特定目标中包含我的头文件吗?

c++ - 一个有效的程序被 man7.org 宣布为无效

c - 如何从 tcl 脚本运行 C 方法?