赞
踩
strncpy是c语言中的一个函数,它的功能是将字符串src中最多n个字符复制到字符数组dest中。(它并不像strcpy一样只有遇到NULL才停止复制,而是多了一个条件停止,就是说如果复制到第n个字符还未遇到NULL,也一样停止),返回指向dest的指针。
注意:
当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> char* my_trncpy(char* dest, const char* src, size_t n) { assert(dest != NULL); assert(src != NULL); while (n) { if (*src == NULL) break; *dest++ = *src++; --n; } return dest; } int main() { char string1[256] = { 0 }; char string2[] = "abcdefgh"; my_trncpy(string1, string2, 7); printf("%s\n", string1); system("pause"); return 0; }
strncat()将会从字符串src的开头拷贝n 个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src指向的字符串内容追加到dest的尾部。strncat()会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> char* my_strncat(char* dest, const char* src, size_t n) { assert(dest != NULL); assert(src != NULL); while (*dest != '\0') ++dest; while (n) { if (*src == '\0') break; *dest++ = *src++; --n; } *dest = '\0'; return dest; } int main() { char string1[256] = "abcdefg"; char string2[] = "higklmn"; my_strncat(string1, string2, 5); printf("%s\n", string1); system("pause"); return 0; }
strncmp函数为字符串比较函数,字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_trncmp(const char* str1, const char* str2, size_t n) { assert(str1 != NULL); assert(str2 != NULL); while (n && *str1 == *str2) { if (*str1 == '\0' || *str2 == '\0') break; ++str1; ++str2; --n; } if (n == 0) return 0; return *str1 - *str2; } int main() { char string1[] = "abcd"; char string2[] = "abcefgh"; int flag = my_strncmp(string1, string2, 4); if (flag < 0) printf("stirng1 < string2\n"); else if (flag > 0) printf("string1 > string2\n"); else printf("string1 = string2\n"); printf("%d\n", flag); system("pause"); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。