c语言模拟实现strncat
时间: 2023-05-28 21:04:37 浏览: 51
#include <stdio.h>
#include <string.h>
char *strncat_(char *dest, const char *src, size_t n)
{
char *p = dest + strlen(dest);
while (*src && n--)
{
*p++ = *src++;
}
*p = '\0';
return dest;
}
int main()
{
char s1[20] = "hello";
char s2[] = "world";
printf("s1 before strncat_: %s\n", s1);
strncat_(s1, s2, 3);
printf("s1 after strncat_: %s\n", s1);
return 0;
}
相关问题
C语言编写函数实现strncat的功能
下面是用C语言编写的函数,实现strncat的功能:
```c
#include <stdio.h>
#include <string.h>
char* my_strncat(char* dest, const char* src, size_t n) {
size_t dest_len = strlen(dest);
size_t i;
for (i = 0; i < n && src[i] != '\0'; i++) {
dest[dest_len + i] = src[i];
}
dest[dest_len + i] = '\0';
return dest;
}
int main() {
char str1[20] = "Hello ";
char str2[] = "world!";
printf("Before: %s\n", str1);
my_strncat(str1, str2, 6);
printf("After: %s\n", str1);
return 0;
}
```
这个函数的原理是先找到目标字符串 `dest` 的末尾位置,然后从源字符串 `src` 的开头开始,逐个将字符复制到目标字符串的末尾,直到复制了 `n` 个字符或者遇到了源字符串的结尾符 `\0`。最后,将目标字符串末尾添加一个结尾符 `\0`。在上面的示例中,我们将 `"world!"` 的前6个字符复制到了 `"Hello "` 后面,所以最终的结果是 `"Hello world!"`。
MIPS代码实现c语言strncat函数strncat(p2 new, p2, n);
我可以回答这个问题。以下是 MIPS 代码实现:
```
strncat:
addi $sp, $sp, -12 # 为 s1, s2, i 分配栈空间
sw $s0, 0($sp) # 保存 s0
sw $s1, 4($sp) # 保存 s1
sw $s2, 8($sp) # 保存 s2
move $s0, $a0 # s0 = new
move $s1, $a1 # s1 = p2
move $s2, $a2 # s2 = n
loop:
lb $t0, ($s0) # 取 new 中的一个字节
addi $s0, $s0, 1 # new 指针向后移动
beq $t0, $zero, endloop # 如果是字符串结束符,则跳转到 endloop
blt $s2, 1, endloop # 如果 n <= 0,则跳转到 endloop
sb $t0, ($s1) # 将 new 中的字节复制到 p2 中
addi $s1, $s1, 1 # p2 指针向后移动
addi $s2, $s2, -1 # n 减一
j loop
endloop:
add $v0, $zero, $s1 # 返回 p2 的地址
lw $s0, 0($sp) # 恢复 s0
lw $s1, 4($sp) # 恢复 s1
lw $s2, 8($sp) # 恢复 s2
addi $sp, $sp, 12 # 释放栈空间
jr $ra # 返回
```