用指针影响字符串

时间:2018-01-01 17:49:25

标签: c crash scanf

不起作用的代码。在用户初始化变量后的函数main中,它转到if部分,然后发生崩溃。该程序的目标是影响字符串中的重复字符。所以我决定在函数f1中有一个指针,指针应该指向数组0th的{​​{1}}个字符。
然后将kar[]0th char进行比较,但程序在最后1st char之后完全崩溃 问题出在哪里?

scanf("%s",kar[1000]).

1 个答案:

答案 0 :(得分:3)

      scanf("%s",kar[1000]);
当你传递char预期char*时,

会触发编译器警告。你传递kar的第1001个元素(超出kar的界限,BTW)。在C数组索引中,第一个元素以0开头。

要扫描到kar,只需传递 kar第一个元素的地址。

      scanf("%s", &kar[0]);

当数组在传递给函数时被衰减到第一个元素的地址时,以下语句是等价的

      scanf("%s", kar);

请注意,上述两个声明很好地允许用户输入更多字符,然后kar可以保留并使用此scanf()溢出kar,即写入超出其范围,调用未定义的行为,这可能会导致程序崩溃或其他任何行为......

为避免这种情况,请通过执行以下操作告诉scanf()扫描的最大值:

      scanf("%999s", kar);

char sa字符串在C中的最大值总是少于一个,因为C字符串需要多一个char才能将其结尾标记为'\0'终止符。