我的代码中有以下typedef:
typedef char * string;
我需要让用户输入一个字符串,以便我可以解析它并稍后使用这些内容。如果我只是声明一个带有这个定义的字符串,它就会起作用,如下所示:
string bob = "My name is bob!;
printf("%s\n", bob);
使用它时,我应该使用什么来获取用户输入,scanf()和fgets() 当我尝试使用它们时,它们都会给我分段错误(核心转储)错误。
这是针对学校的,这就是我需要以这种方式使用typedef的原因。
答案 0 :(得分:0)
您可以typedef
pointer variable
但在使用或访问typedefed pointer variable
时必须小心,因为通常您不会在{{1}中看到*
符号}}和declaration
可能在其他地方,您可以将其视为正常变量。
如果你想从运行时或从文件中获取指针变量的输入,你应该分配内存。
definition
上面的代码会导致分段错误,所以首先动态分配内存。
int main()
{
typedef char * string;// now string also a char pointer
string bob;// bob is pointer variable
printf("enter the string\n");
scanf("%s",bob);//bob is uninitialized pointer .. u can't put any data
printf("%s\n", bob);
//once job is done free dynamically allocated memory using free function
}
答案 1 :(得分:0)
那是因为你必须设定起始值
假设您有char * a;
a
具有未定义的值,可能指向未经授权的区域。你不能写在那里。
你该怎么办?如果必须使用typedef char * string;
,则必须将其写入:
1)动态堆,2)堆栈缓冲区。
1)使用malloc
- 必须包含在stdlib.h
中的函数,并在动态堆中分配内存。该函数返回指向已分配内存开头的指针。
通过free()
功能,在使用它来释放分配的内存以避免泄漏后,请不要忘记。
2)声明字符的预定数组大小,并将其地址赋予变量。
#include <stdio.h>
#include <stdlib.h>
#define MY_SIZE 50
typedef char * string;
int main() {
string s;
// 1)
s = malloc(MY_SIZE);
// some code
free(s);
// 2)
char buf[MY_SIZE];
s = buf;
return 0;
}
你必须练习两种方式。
希望我能帮助你!
答案 2 :(得分:0)
需要为使用typedef时如何从用户获取字符串? (
typedef char * string;
)
string bob
分配一个值,内存位置用于存储读取的数据。
#define N 80
// local array
char buf[N];
string bob = buf;
fgets(bob, N, stdin);
// or malloc
string bob = malloc(N);
if (bob == NULL) Handle_OutOfMemory();
fgets(bob, N, stdin);
现在修剪潜在的'\n'
bob[strcspn(bob, "\n")] = '\0';
打印结果
printf("<%s>\n", bob);
...稍后再使用这些内容。
这意味着代码应使用正确大小的内存分配,以便很好地传递此输入代码。 strdup()
不在标准C库中,但非常常见。
Sample code
// local array approach
bob = strdup(bob);
// Now bob points to allocated memory
// malloc approach
// re-size to be efficient
void *t = realloc(bob, strlen(bob) + 1);
if (t) {
bob = t;
}
// Detail: A realloc to a smaller amount of memory rarely ever fails.
// If it did fail, just continue with old pointer.
如果bob
指向已分配的内存,请在完成bob
后进行清理。
free(bob);
如果需要,只能使用scanf()
,您不能放弃课程或在其他地方就业。