aboutsummaryrefslogtreecommitdiff
path: root/5.5.c
diff options
context:
space:
mode:
Diffstat (limited to '5.5.c')
-rw-r--r--5.5.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/5.5.c b/5.5.c
new file mode 100644
index 0000000..bd14a40
--- /dev/null
+++ b/5.5.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+
+char *strncpy(char to[], const char from[], int till);
+char *strncat(char to[], const char from[], int till);
+int strncmp_sneed(const char str1[], const char str2[], int till);
+
+int
+main(void)
+{
+ char str[10];
+ printf("%s\n", strncpy(str, "gnu linux", 3));
+
+ printf("%s\n", strncat(str, " linux", 6));
+
+ if (!strncmp_sneed("seed", "seed feed", 3))
+ printf("suckses\n");
+
+ return 0;
+}
+
+char *strncpy(char to[], const char from[], int till)
+{
+ if (from[till] != '\0')
+ to[till+1] = '\0';
+
+ while (till--)
+ *(to+till) = *(from+till);
+
+ return to;
+}
+
+char *strncat(char to[], const char from[], int till)
+{
+ char *to_og = to;
+
+ while (*to)
+ ++to;
+
+ while (till--)
+ *(to+till) = *(from+till);
+
+ return to_og;
+}
+
+int
+strncmp_sneed(const char str1[], const char str2[], int till)
+{
+ int count;
+
+ for (count = 0, --till; count < till && *(str1+count) == *(str2+count); count++)
+ ;
+
+ return *(str1+count) - *(str2+count);
+}