c - 无法从函数返回 char 指针

标签 c pointers return-value ansi-c

使用 ansi c
#define STDC_VERSION 201112L

我是c语言新手,但从 Improve this question 那里得到了指导

无论我尝试过什么方法,我都无法返回 sum 指针。

运行代码成功(创建正确的数字),printf 函数中的 addNumericStrings 可以工作,但 printf 中的 main 不工作(不打印任何内容)。我认为是由于之前的错误。我没有收到任何有关构建的警告。

输出

addNumericStrings.sum = 11234567889

主要

#include <stdio.h>
#include <stdlib.h>
#include "addViaStrings.h"

int main(void) {
    char s1[] = "9999999999";
    char s2[] = "1234567890";

    char *sum = addNumericStrings(s1, s2);
    printf("main.sum = %s\n", sum);
}

函数

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

char addNumericStrings(char *s1, char *s2);
char leftPad(char *result, char *s, int maxlength);
int  findMaxLength(char *s1, char *s2);

char addNumericStrings(char *s1, char *s2){
    int maxlength = findMaxLength(s1, s2);
    char addend1[maxlength];
    char addend2[maxlength];

    char *sum = (char *) malloc(sizeof(char) * (maxlength + 2) );

    int a1, a2, total;
    int carry = 0;

//  char sum[(maxlength + 2)]; // +1 in case addition rolls over past maxlength
    // Prepare the strings for manual addition
    leftPad(addend1, s1, maxlength);
    leftPad(addend2, s2, maxlength);
    // Buffer sum with ascii zeros (#48), not 0, and not "\0"
    for (int i = 0; i < (maxlength + 1); i++) { sum[i] = 48; }
    sum[maxlength + 1] = 0;
    // Run the manual addition
    // Start adding individual ints from end (right side)
    for (int i = maxlength - 1 ; i >= 0; i--) {
        a1 = addend1[i] - '0'; // Convert to int
        a2 = addend2[i] - '0'; // Convert to int
        total = (a1 + a2 + carry);
        carry = 0;
        if ( total >= 10){
            carry += 1;
            total -= 10;
        }
        sum[i +1] = 48+total; // convert to ascii value for numbers (adding 48)
    }
    sum[0] = 48+carry; // add last carry to start of num always, even if 0
    sum[maxlength + 1] = '\0';
    printf("addNumericStrings.sum = %s\n", sum);
    return sum;
}

char leftPad(char *result, char *s, int maxlength){
    // Pads number to [000123456789]    
    ( ...snip... )
}

int findMaxLength(char *s1, char *s2){
// Returns int value of the length of the longer between s1 and s2
    int length1 = strlen(s1);
    int length2 = strlen(s2);
    int maxlength;
    (length1 > length2) ? (maxlength = length1) : (maxlength = length2);
    return maxlength;
}

最佳答案

如果您想从函数返回 char *,则必须使用适当的返回类型:

char* foo(void)
//  ^
{
    char *bar;

    // ...

    return bar;
}

关于c - 无法从函数返回 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53033610/

相关文章:

c - 将二维数组作为指针传递,gcc 警告不兼容的指针类型

PHP 返回长字符串不能用作字符串

C 指针程序使用指针交换字符串

c - 编写无阻塞connect()代码的理想方法是什么?

c - 我如何使用 clone() 系统调用而不是通常的 fork() + exec() 组合?

c - long double 在使用 MinGW 编译时给出错误的结果

c++ - char 数组的 strlen 大于其大小。如何避免?

c++ - 赋值运算符返回

C++ |如何在每次不返回值的情况下循环 If 语句

c - 如何从系统调用号获取 Linux 系统调用名称?