使用引用打印字符值

Printing char value using reference

我在尝试 printf() char 变量时遇到问题。

我声明了两个数组,一个用于品牌名称,另一个用于值,根据哪个值最大我根据数组中的位置获得适当的品牌名称。

好吧,在这里打印 marca 效果很好。但是当我尝试在函数之外打印它时它没有。

有什么想法吗?

最小可重现示例:

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

void fabricanteDeModa(char *);

int main()
{
    char marca;
    fabricanteDeModa(&marca);
    printf("%s", marca); //Not working (already tried changing to %c)

    return 0;
}

void fabricanteDeModa(char *marca)
{
    int apple = 5;
    int xiaomi = 10;
    int samsung = 7;
    int htc = 12;
    int lg = 15;
    int zte = 10;
    int nokia = 2;

    char marcas[7][10] = {
        "apple",
        "xiaomi",
        "samsung",
        "htc",
        "lg",
        "zte",
        "nokia"
    };

    int valores[7] = { apple, xiaomi, samsung, htc, lg, zte, nokia };
    int i;
    int maxVal = valores[0];
    int pos = 0;

    for (i = 1; i < 7; ++i)
    {
        if (valores[i] > maxVal)
        {
            maxVal = valores[i];
            // Find the index of the max value
            pos = i;
        }
    }
    marca = marcas[pos];
    printf("%s\n", marca); //This Works
}

marca 应定义为 char * 或更好的 const char * 并且 fabricanteDeModa 应 return 品牌名称,而不是指向 char 已发布。

到return字符串,数组marcas不应该是char的二维数组自动存储(non-static局部变量)其元素不会在函数 returns 之后可访问,您可以改为使用字符串指针数组。

这是修改后的版本:

#include <stdio.h>

const char *fabricanteDeModa(void);

int main() {
    const char *marca = fabricanteDeModa();
    printf("%s\n", marca);
    return 0;
}

const char *fabricanteDeModa(void) {
    int apple = 5;
    int xiaomi = 10;
    int samsung = 7;
    int htc = 12;
    int lg = 15;
    int zte = 10;
    int nokia = 2;

    const char *marcas[7] = { "apple", "xiaomi", "samsung", "htc", "lg", "zte", "nokia" };
    int valores[7] = { apple, xiaomi, samsung, htc, lg, zte, nokia };
    int i;
    int maxVal = valores[0];
    int pos = 0;

    for (i = 1; i < 7; ++i) {
        if (valores[i] > maxVal) {
            maxVal = valores[i];
            // Update the index of the max value
            pos = i;
        }
    }
    printf("Largest element = %d\n", pos);
    printf("La marca de moda es : %s\n", marcas[pos]); //This Works
    return marcas[pos];
}

看起来你想要的是返回给你的字符串然后打印的具有最大值的制造商品牌。为了让它工作,这里是我更改的部分。

首先,我没有定义指向字符的指针(这与指向“int”的指针基本相同),而是定义了一个与最大可能的制造商名称一样大的字符数组。可能还有其他初始化字符数组的方法,但这是我所知道的最简单的方法。然后我将字符串名称作为指针引用传递给您的函数,如以下代码片段中所述。

char marca[10];
fabricanteDeModa(marca);

在“fabricantDeModa”函数的当前迭代中,您将字符数组引用作为参数,但就目前而言,它没有在函数内更新。因此,我添加了我认为您正在尝试做的事情,即在该字符串中存储制造商的名称。为此,我添加了一个“strcpy”命令以将制造商的名称放入您的主级字符数组中。

    }
    strcpy(marca, marcas[pos]);   /* Added this code */
    printf("Largest element = %d\n", pos);
    printf("La marca de moda es : %s\n", marcas[pos]); //This Works
}

传递和更新字符串(字符数组)可能很棘手。我希望这能为你澄清事情。

此致。