不用assert实现strlen
时间: 2024-01-01 18:04:59 浏览: 117
以下是不使用assert实现strlen的示例代码:
```c
#include <stdio.h>
size_t strlen(const char *str) {
size_t len = 0;
while (*str++) {
len++;
}
return len;
}
int main() {
char str[] = "Hello, world!";
printf("The length of the string is: %zu\n", strlen(str));
return 0;
}
```
该代码中,我们使用了一个while循环来遍历字符串中的每个字符,直到遇到字符串的结尾符'\0'。在每次循环中,我们将len变量加1,最终返回len的值作为字符串的长度。
相关问题
模拟strlen递归
你可以使用递归来模拟实现strlen函数。以下是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
size_t my_strlen(const char *str) {
assert(str != NULL);
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main() {
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d\n", len);
system("pause");
return 0;
}
在这个代码中,我们定义了一个my_strlen函数,它接受一个指向字符数组的指针作为参数。通过递归调用,如果当前字符不是字符串的结束符'\0',则返回1加上调用my_strlen函数传入的下一个字符的指针。最终,当遇到字符串的结束符时,返回0,表示字符串的长度为0。在main函数中,我们调用my_strlen函数来计算字符数组的长度,并将结果打印出来。
这是一个使用递归实现strlen函数的例子。注意,在实际的编程中,我们应该使用标准库中的strlen函数来计算字符串的长度,因为它已经经过充分测试和优化,具有更好的性能和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [strlen的模拟(递归实现)](https://blog.csdn.net/qq_58330935/article/details/127184319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C语言:模拟实现strlen的三种方法(非递归,递归,指针)](https://blog.csdn.net/ETalien_/article/details/81263135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
assert函数防止缓冲区溢出
assert函数是C/C++中的一种调试工具,用于在程序执行时检查指定的条件是否为真。如果指定的条件为假,则程序会终止,并打印出错误信息。
在防止缓冲区溢出时,我们可以通过使用assert函数来确保程序不会访问未分配的内存或超出数组范围。例如,我们可以在读取用户输入时,使用assert函数检查输入的长度是否超出了缓冲区的大小。
以下是一个示例代码:
```
#include <assert.h>
#include <stdio.h>
#include <string.h>
int main() {
char buffer[10];
printf("请输入一个不超过10个字符的字符串:");
fgets(buffer, 10, stdin);
assert(strlen(buffer) <= 10); // 检查输入的长度是否超出了缓冲区的大小
printf("输入的字符串是:%s\n", buffer);
return 0;
}
```
如果用户输入的字符串长度超出了10个字符,程序会终止并打印出错误信息。