gpt4 book ai didi

C - 将整数放入字符数组中并提取它

转载 作者:行者123 更新时间:2023-11-30 18:29:31 26 4
gpt4 key购买 nike

C 中的字符串操作是我存在的祸根,我试图理解如何操作 char 数组,但每次都未能掌握它。我只是想在 C 中执行此操作。

Method1 passes ["1298","9"]
Method2 receives and converts them both to ints

int method1(){
char *values[2];
int i = 1298;
int j = 9;

//sprintf(values,"%d" "%d",i,j);
sprintf(&values[0],"%d" ,i);
sprintf(&values[1],"%d" ,j);
method2(values,2);
}
int method2(char *strings, int num_values){
int i, j;
char buffer[256];
sscanf(buffer, "%d" "%d", &i, &j);
printf("i: %d, j: %d\n",i,j);
return 0;
}

结果是1和9;但我想要 1298 和 9请在提供答案后,您能解释一下为什么会这样吗?

最佳答案

    char *values[2];

上面的行被解析为 char *(values[2]);,即 [] 优先于 *。这意味着 values 是一个包含 2 个元素的数组。元素的类型是char *。因此,values[0]values[1] 的类型为 char *。由于您尚未初始化数组元素,因此数组中的两项具有未知的随机值。

    //sprintf(values,"%d" "%d",i,j);

尽管您已经注释掉了这一点,但似乎您正在尝试使用一个将 ij 的字符串表示形式存储到 valuessprintf 调用。正如您可能发现的那样,这是不可能的。

    sprintf(&values[0],"%d" ,i);

在这里,您调用 sprintfi 的字符串表示形式存储到 values[0] 指向的内存位置。但如上所述,values[0] 没有指向任何有用的地方,因为您尚未初始化它。这很糟糕。

    sprintf(&values[1],"%d" ,j);

同上。

    method2(values, 2);

在这里,您正在调用 method2,但尚未声明 method2 的签名。事实证明,method2 采用一个 char * 和一个 int。您正在传递 values2values 是一个 char * 数组,在此上下文中它将转换为指针,因此 method2 应该采用 char ** 和一个int

int method2(char *strings, int num_values){

这应该是:int method2(char **strings, int num_values) {

    int i, j;
char buffer[256];
sscanf(buffer, "%d" "%d", &i, &j);

我不确定你想在这里做什么。您忽略了字符串,而是使用了缓冲区变量。 buffer 未初始化,因此尝试将其中的数据解释为两个整数是没有意义的。

我假设您编写此程序是为了理解字符串、指针和函数。因此,没有单一正确的方法可以完成您想要做的事情。但这里有一种方法:

#include <stdio.h>
/* Define method2 before method1, so that its definition is visible
in method1 */

/* Assume that method2 will be called with one char * containing two integer
values. I also changed the return type to void since you weren't really
using the int return value. Same for method1. */
void method2(const char *strings)
{
int i, j;
sscanf(strings, "%d %d", &i, &j);
printf("i: %d, j: %d\n",i,j);
}

void method1(void)
{
/* Changed values to a char array that has enough space */
char values[256];
int i = 1298;
int j = 9;

sprintf(values, "%d %d", i, j);
method2(values);
}

int main(void)
{
method1();
return 0;
}

以上输出:

i: 1298, j: 9

您的程序中有很多事件部分。我建议您先学习 C 语言中的指针、数组等基础知识,然后再在函数中传递它们。

关于C - 将整数放入字符数组中并提取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com