防止输入的char数组的缓冲区损坏

时间:2018-03-17 03:17:26

标签: c arrays corruption

我想问一下如何防止数组缓冲区中的损坏,这是我的代码。

 03-17 08:26:22.192 18559-18559/vigilant.com.vigilant.vigilant D/Trck: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.
03-17 08:26:32.183 18559-18559/vigilant.com.vigilant.vigilant D/Trck: Before Try
03-17 08:26:32.185 18559-18559/vigilant.com.vigilant.vigilant W/System.err: java.lang.SecurityException: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.
03-17 08:26:32.185 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.os.Parcel.readException(Parcel.java:1693)
03-17 08:26:32.185 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.os.Parcel.readException(Parcel.java:1646)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.location.ILocationManager$Stub$Proxy.getLastLocation(ILocationManager.java:792)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.location.LocationManager.getLastKnownLocation(LocationManager.java:1205)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at vigilant.com.vigilant.vigilant.LocationControService.getUserLocation(LocationControService.java:100)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at vigilant.com.vigilant.vigilant.LocationControService.access$000(LocationControService.java:30)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at vigilant.com.vigilant.vigilant.LocationControService$TimeDisplayTimerTask$1.run(LocationControService.java:83)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.os.Looper.loop(Looper.java:154)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6692)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
03-17 08:26:32.186 18559-18559/vigilant.com.vigilant.vigilant D/Trck: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.

假设我们已经相应地向buffSize输入了第一个char的arr,然后我们输入了第二个char的arr,其输入超过了buffSize的限制。将为arr1分配一些在arr2大小之上输入的字符。如何防止这种情况?

1 个答案:

答案 0 :(得分:3)

fflush(stdin)是未定义的行为,通常只为输出流定义。

请改为尝试:

while ((c = getchar()) != '\n' && c != EOF);

如果您尝试限制scanf()尝试阅读的字符数,可以使用:

scanf("%19[^\n]", arr2);

请注意,scanf()中指定的数字必须比缓冲区大小少一个,以节省'\0'的空间,并且应该是arr1arr2,不是{{ 1}}。数组名称已经是指向数组开头的指针。