【问题标题】:Can't pass pointers to scanf("%s",ptr);无法将指针传递给 scanf("%s",ptr);
【发布时间】:2012-09-09 17:10:52
【问题描述】:

所以我注释掉了scanf部分(并且只是用我自己的字符串初始化它),如果我使用scanf为什么它会崩溃?我相信我在 scanf(); 中提出的实际论点;是正确的。

#include <stdio.h>
#include <stdlib.h>
int strendmilan(char *s,char *t)
{
    int scntr = 0,tcntr = 0;
    while(*(s+(scntr++)) != '\0')
        ;
    --scntr;
    while(*(t+(tcntr++)) != '\0')
        ;
    --tcntr;
    while(tcntr >= 0)
        if(*(s+scntr--) == *(t+tcntr--))
            ;
        else
            return 0;
    return 1;
}
int main()
{
    char *s,*t; 
    /*
    scanf("%s",s);
    scanf("%s",t);
    */
    s = "HAHAHACOOL";
    t = "COOL";
    if(strendmilan(s,t) == 0)
        printf("NOT");
    else
        printf("YES");
    getch();
}

【问题讨论】:

  • 在调用scanf之前给s分配一些内存。

标签: c string pointers scanf


【解决方案1】:

问题是您正在向scanf() 发送一个指向缓冲区的指针(例如,s),它可以存储读取的信息,但是您没有分配任何指向的缓冲区空间发给st 也一样)

char *s,*t; 
scanf("%s",s);

因此,您可以为s 分配一个字符数组,或者使用malloc() 分配一些存储空间并将该调用的返回值分配给s

【讨论】:

  • 但是 s = "HAHAHACOOL"; t =“酷”;即使我不分配空间也可以工作
  • @vincentbelkin 这真的不会改变我发布的任何内容。 scanf 想要一个指向可以存储数据的位置的指针。您创建指针,然后立即调用scanf 没有为s 分配任何存储空间以指向(并为scanf 成功使用)。
  • @vincentbelkin, t="COOL" 隐式分配一些内存来存储字符串文字,然后将该内存的位置分配给指针变量。 scanf 期望指针变量已经指向分配的内存,它会将读取的字符放入其中。
  • 我想我误解了一些东西,但不是 s = "HAHA";要求我使用 malloc();也分配存储空间?为什么会起作用?
  • @vincentbelkin 这是一个字符串文字(如果有帮助,可以将其视为常量)。另请参阅 DaveCosta 的评论。此外,即使这有效,您也是在 调用 scanf ... 之后执行此操作
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2011-07-09
相关资源
最近更新 更多