【发布时间】:2015-10-25 12:28:54
【问题描述】:
我有一个问题,内容如下:
编写一个函数 int tokenCopy(char* dest, const char* src, int destSize) 将字符从给定的源字符串 src 复制到给定的目标缓冲区 dest,其大小为 destSize,直到:
出现源字符串的结尾,或者
目标缓冲区已满(允许需要的终止符),或
在输入字符串中找到一个空格字符
以先到者为准。如果由于找到空间而完成复制,则不复制该空间。目标字符串必须始终正确终止。如果源字符串的目标空间不足,则目标字符串必须是源字符串的正确终止的前导子字符串。
返回值是复制的字符数,不包括终止的空字节。
这是我目前的尝试:
int tokenCopy(char* dest, const char* src, int destSize)
{
int the_slab = 0;
for (; *src != ('\0' | ' '); the_slab++)
{
if ( *src == (32 | 0))
{
*dest = '\0';
return the_slab;
}
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return the_slab;
}
但是当测试失败时:
char buff[10];
int n = tokenCopy(buff, "This", 10);
printf("%d '%s'\n", n, buff);
因为它返回数字 7 而不是 4。 为什么它在处理前四个字母后没有终止?我不明白为什么 src 没有终止字节?
我做错了什么?我从概念上看不懂什么?
谢谢!
【问题讨论】:
-
虽然,建议的副本看起来像一个副本,但那里的答案真的很混乱,并没有解决一个简单的问题。更糟糕的是,该示例将
"x"等 c 字符串与==运算符进行了比较! -
谁在乎?问题出在基本的语言结构上,如果不是重复的话,会因为其他原因而关闭。有许多。许多人对复合条件句的基础知识有这样的误解。
标签: c