C - char指针和char指针字符串管理

时间:2014-04-23 20:36:36

标签: c string pointers arrays

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

理想的解决方案是将字符串获取到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;
}

因此我使用sting进入一个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数组

3 个答案:

答案 0 :(得分:2)

您不会将指针初始化为指向任何内容。您可以使用malloc()为堆上的内存分配内存,但确保在完成后free(),否则会泄漏内存。例如,将原始代码块更改为:

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

/* ... */

free(charString);
return EXIT_SUCCESS;

答案 1 :(得分:1)

您需要为角色分配空间:

charString = malloc(CHARARRAYSIZE+1);

稍后,您需要释放它们

free(charString);

答案 2 :(得分:1)

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

必须分配空间来扫描您的数据。该空间可以是本地的(例如您的本地字符数组),也可以是其他地方(例如通过malloc()分配),但它不能是随机的,因为您当前正在做或者会发生不好的事情。