通过scanf获取字符串输入时的未定义行为

时间:2016-05-30 20:51:47

标签: c++ arrays scanf

我已经声明了一个大小为4的字符数组。当我接受一个大小为5的字符串输入时,程序会输出正确的字符串。为什么会这样?也有8个字符,它打印正确的字符串,但有9个字符,它会出错。

library(microbenchmark)

mat = matrix(1:1600, nrow=4, byrow = FALSE)

lapply.function <- function(x) {

     step1 <- lapply(seq(nrow(mat), ncol(mat), nrow(mat)), function(i) {
                     t(mat[, c((i - (nrow(mat) - 1) ):i)])
              } )

     l.output <- do.call(cbind, step1)
     return(l.output)
}

lapply.output <- lapply.function(mat)

matrix.function <- function(x) { 
     m.output <- matrix(t(mat), nrow=nrow(mat))[, c(matrix(1:ncol(mat), nrow(mat), byrow=TRUE)) ] 
}

matrix.output <- matrix.function(mat)

identical(lapply.function(mat), matrix.function(mat))

microbenchmark(lapply.function(mat), matrix.function(mat), times = 1000)

#Unit: microseconds
#                 expr     min      lq      mean  median      uq      max neval
# lapply.function(mat) 735.602 776.652 824.44917 791.443 809.856 2260.834  1000
# matrix.function(mat)  32.298  35.619  37.75495  36.826  37.732   78.481  1000

当我尝试将输入作为9个字符的长字符串时出错:

#include <iostream>
using namespace std;
int main()
{
    char s[4];
    scanf("%s",s);
    printf("%s",s);
}

0 个答案:

没有答案