scanf后修改参数

时间:2016-11-15 17:47:54

标签: c

我对c很新,我发现使用scanf函数后我的char * string参数被修改,c的输入不会改变结束输出也不会实际参数。虽然它确实看起来代码中的下一步确实改变了最终输出。我无法在网上找到任何这种情况的例子有人知道这是什么吗?我唯一的想法就是我错过了一些东西,但我无法看到它是什么

#include <stdio.h>
#include <stdlib.h>

int method1(char *string){
    char c;
    printf("enter(y/n): ");
    scanf("%s", &c);
    printf("%s\n", string);
    return 0;
}

int main() {
    char *string = "string";
    printf("%s\n", string);
    method1(string);
    return 0;
}

输出: 串 输入(y / n):y▒E▒

1 个答案:

答案 0 :(得分:4)

c只能容纳一个字符。但

scanf("%s", &c);

会读取多个字符,c中没有空间。因此,它是this question。 即使您只输入1个字符,%s仍然需要一个空格来终止空字节。

如果您只想阅读单个字符,则可以使用undefined behaviour,如下所示:

char c[2];
if (fgets(c, sizeof c, stdin)) {
  /* c[0] contains your input 'y' or 'n' */
}

始终避免scanf()。请参阅:fgets()