【问题标题】:C - char pointer and char pointer string managementC - char指针和char指针字符串管理
【发布时间】:2014-04-23 20:36:36
【问题描述】:

我必须输入一个字符串并将其显示到标准输出。

理想的解决方案是将字符串获取到 char 指针数组中,但是我在 scanf 上遇到错误,我推测是因为 char 指针字符串解决方案没有为其分配空间。

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

#include <string.h>


int main(void) {

char *charString;



printf("Input string - max %i caratteri: ",CHARARRAYSIZE);
scanf("%s", charString);

printf("%s",charString);


    return EXIT_SUCCESS;
}

因此,我求助于将字符串获取到一个 char 数组中,然后将 (strcpy) 复制到一个 char 指针 string.v 在这种情况下,我收到一个警告,说在 strcpy 调用 sayng 时使用了 strcpy 而没有被初始化。我该如何解决这个问题?

请在下面找到第二种情况的代码。

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

#include <string.h>



#define CHARARRAYSIZE 16


int main(void) {

char *charString;
char charArray[CHARARRAYSIZE];


printf("Input string - max %i characters: ",CHARARRAYSIZE);
scanf("%s", charArray);

strcpy(charString,charArray);

printf("%s",charString);


return EXIT_SUCCESS;
}

有什么方法可以实现我的目标并避免使用 char 数组

【问题讨论】:

  • charString 仍然没有任何内存分配给它,那么您如何期望复制操作成功呢?您需要使用malloc 为指向的指针分配一些堆空间。

标签: c string pointers arrays


【解决方案1】:

你没有初始化指针来指向任何东西。您可以使用malloc() 在堆上为其分配内存,但请确保在完成后使用free() 它,否则会泄漏内存。例如,将您的原始代码块更改为如下所示:

/* You need + 1 to store the terminating null character. */
char * charString = malloc(CHARARRAYSIZE + 1);

/* ... */

free(charString);
return EXIT_SUCCESS;

【讨论】:

  • 好的,谢谢。为您解答。这就是问题所在。但是,由于@Johnny Mopp 的声誉低于您,我将接受他的回答,因为这对他的帮助比对您的帮助更大。你同意吗?
  • @geraldCelente 最终由您决定。 SO 准则是接受最有帮助的答案,因为这将有助于未来的访问者提出相同的问题。
  • 好的,谢谢。无论如何,非常感谢您的帮助。
【解决方案2】:

你需要为字符分配空间:

charString = malloc(CHARARRAYSIZE+1);

稍后,您需要释放它们

free(charString);

【讨论】:

    【解决方案3】:

    使用 char 数组对您没有任何帮助....strcpy(charString,charArray); 仍在写入未定义的地址!

    必须分配空间来扫描您的数据。该空间可以是本地的(例如您的本地字符数组),也可以是其他地方(例如通过malloc() 分配),但它不能像您当前所做的那样是随机的,否则会发生坏事。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2021-03-30
      • 2021-11-26
      • 2012-10-04
      • 2021-01-26
      • 2010-12-12
      • 2012-03-10
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多