我必须输入一个字符串并将其显示为标准输出。
理想的解决方案是将字符串获取到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数组
答案 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()
分配),但它不能是随机的,因为您当前正在做或者会发生不好的事情。