#include <stdio.h>
#define STR_BUF 10000
#define STR_MATCH 7
void mystrncpy(char* s, char* t, int n) {
while(*s++ = *t++ && n-- > 0);
}
int main() {
int result;
char str_s[STR_BUF] = "not so long test string";
char buf_1[STR_BUF];
mystrncpy(buf_1, str_s, STR_MATCH);
printf ("buf_1 (mystrncpy, 7 chars): %s\n", buf_1);
return 0;
}
当我运行它时,什么也没发生
ian@ubuntu:~/tmp$ gcc myncpy.c -o myn&&./myn
buf_1 (mystrncpy, 7chars):
答案 0 :(得分:7)
作业的优先级低于&&
,因此您的while
条件相当于:
while (*s++ = (*t++ && n-- > 0))
将*s++
与1
或0
进行比较。那不是你想要的。
while ((*s++ = *t++) && n-- > 0)
应该修复它。
请注意,您仍然使用%s
来打印字符串来调用未定义的行为。它没有被终止。
char buf_1[STR_BUF] = "";
是解决这个问题的一种方法。
答案 1 :(得分:1)
逻辑和(&amp;&amp;)采用等于(=)的更高优先级,因此你的while表达式实际上是:
while(*s++ = ( *t++ && n-- > 0 ) );
将其更改为:
while( ( *s++ = *t++ ) != '\0' && n-- > 0);
正确处理问题和null终结符