不能声明两个字符指针

标签 c string pointers

<分区>

Possible Duplicate:
why does c allow initialization of string without declaration?

我正在尝试这个相当简单的代码:

#include<stdio.h>
void copy(char *,char *);
main() {
char *name;
char *surname;
printf("Enter name: ");
scanf("%s",name);

printf("%s",name);
}    

但出于某种原因,在我输入名称并按 Enter 后,程序挂起并给出一条消息,如 Program has stopped working. 但是,当我删除第二个时字符指针声明,即 char *surname;,它按预期工作。这里有什么问题?

最佳答案

你没有为指针分配内存,所以 scanf访问任意未指定的内存,这是未定义的行为。

你需要传递指向足够大的内存块的指针给scanf,要么声明

char s1[100], s2[100];

(如果 100 足够大),或 malloc内存

char *s1 = malloc(100);
char *s2 = malloc(100);
if (!s1 || !s2) {
    // malloc failure
    exit(EXIT_FAILURE);
}

关于不能声明两个字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13100206/

相关文章:

c - 按值管理函数参数与引用内存管理

string - 如何计算 f# 中字符串中的元音字母

c - SPARC 程序集,如何访问指向结构的 C 指针

c - 了解反编译汇编代码

c - 如何返回指向缓冲区中位置的指针?

属性的 Python 映射函数

python - 将字符串添加到 url python

c - 从应用程序内修改函数参数(指针)

c - 删除C中链表中的每个奇数位置节点

c - 为了将 tcp 程序转换为 udp 需要进行哪些更改