不起作用的代码。在用户初始化变量后的函数main
中,它转到if
部分,然后发生崩溃。该程序的目标是影响字符串中的重复字符。所以我决定在函数f1
中有一个指针,指针应该指向数组0th
的{{1}}个字符。
然后将kar[]
与0th char
进行比较,但程序在最后1st char
之后完全崩溃
问题出在哪里?
scanf("%s",kar[1000]).
答案 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'
终止符。