gpt4 book ai didi

c - 微软面试题这个函数有什么错误?

转载 作者:太空狗 更新时间:2023-10-29 16:24:14 26 4
gpt4 key购买 nike

我在 MS writing walkin-interview 中被问到这个问题:

在下面的程序中查找错误,该错误应该返回一个附加有 \n 的新字符串。

char* AddnewlinetoString(char *s)
{
char buffer[1024];
strcpy(buffer,s);
buffer[strlen(s)-1] = '\n';
return buffer;
}

我曾尝试自己编写代码,并通过将缓冲区变量设置为全局变量并设置 buffer[strlen(s)] = '\n' 使其正常工作。但是不知道里面还有很多其他的bug。

最佳答案

我可以看到一些:

Length of input string not checked.

如果 strlen(s) > 1023 怎么办?您最多可以在缓冲区中容纳长度为 1023 的字符串。

Overwriting the last char with \n

您正在用换行符覆盖最后一个字符。您的 \n 应该位于 \0 曾经所在的位置,您需要在 \n 之后添加一个新的 \0 >

Variable buffer is local to function and you are returning its address.

缓冲区的内存在堆栈上分配,一旦函数返回,该内存就会被释放。

我会这样做:

char* AddnewlinetoString(char *s) {

size_t buffLen = strlen(s) + 2; // +1 for '\n' +1 for '\0'
char *buffer = malloc(buffLen);
if(!buffer) {
fprintf(stderr,"Error allocting\n");
exit(1);
}
strcpy(buffer,s);
buffer[buffLen-2] = '\n';
buffer[buffLen-1] = 0;
return buffer;
}

关于c - 微软面试题这个函数有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3758791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com