【问题标题】:char pointers and strcpy in CC中的char指针和strcpy
【发布时间】:2017-03-30 19:05:30
【问题描述】:

首先让我开始说我已阅读与此主题相关的所有问题,但无法找到解决问题的方法。所有的答案似乎都是停止使用指针和字符(我需要这样做)或者是关于其他结构。

我需要创建一个返回整数的函数,但还要保存过程的步骤,我将使用 snprintf 和指针将其保存为字符。我将保留基本的想法,但它比我将要提出的要复杂得多。

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


int sum_and_diff (int a, int b, int *res, char *text);

int main(void){
    int b = 2;
    int diff;
    char texto;

    printf("La suma de 5 y %d es %d\n", b, sum_and_diff(5, b, &diff, &texto));
    printf("La diferencia de 5 y %d es %d\n", b, diff);
    printf("El texto es %s\n", texto);
}



int sum_and_diff (int a, int b, int *res, char *text){
    char texto;
    int sum;

    //text = malloc(sizeof(char) * 254);
    //text = (char *)malloc(sizeof(char) * 254);
    sum = a + b;
    *res = a - b;
    texto = "Hola";
    strcpy(*text, texto);
    //strcpy(text, texto);
    return sum;
}

我想使用这个示例,因为它展示了如何在函数内部使用指针来获取更多信息,用于获取 diff 的相同过程不适用于字符类型。

与我的实际程序的唯一区别是变量“texto”从 snprintf 获取其字符值(做我需要它做的事情,我已经通过在函数内打印变量来检查)。问题在于让指针指向变量。

谢谢!如果有区别,我正在使用 gcc 4.9 进行编译。被评论的东西是我尝试过但没有奏效的东西,还尝试了其他一些细微的变化。

【问题讨论】:

标签: c pointers char strcpy


【解决方案1】:

在不分配的情况下声明指向 char 的指针是错误的。 你看我的代码。 [c]

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

#define SIZE    8

int sum_and_diff (int a, int b, int *res, char *text);

int main(void)
{
    int b = 2;
    int diff;
    char *texto = (char *)malloc(SIZE);
    if (!texto)
        abort();
    printf("La suma de 5 y %d es %d\n", b, sum_and_diff(5, b, &diff, texto));
    printf("La diferencia de 5 y %d es %d\n", b, diff);
    printf("El texto es %s\n", texto);
    free(texto);
}

int sum_and_diff (int a, int b, int *res, char *text)
{
    char *texto = (char *)malloc(SIZE);
    int sum;
    if (!texto)
        abort();
    sum = a + b;
    *res = a - b;
    texto = "Hola";
    strcpy(text, texto);
    free(texto);
    return sum;
}

【讨论】:

  • 现在是展示 free() 重要性的好时机
  • free() 非常重要,因为 C 没有垃圾收集功能。我怎么能忘记呢?嗯……
  • 很好奇为什么将(char *) 转换为char *texto = (char *)malloc(SIZE); 而只是简单地char *texto = malloc(SIZE);?当然char *texto = malloc(SIZE); 是合法的 C.
  • 为了与C++兼容,我们使用char *texto = (char *)malloc(SIZE)。
  • texto = "Hola;" 泄漏内存,然后free(texto) 是未定义的行为。 = 与 strcpy 不同。
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多