我目前正在从事一个计算机科学项目,并且已经完全开始工作了一个非常具体的案例,我似乎无法修复 . 代码的目标是编写一个函数int tokenCopy(char * dest,const char * src,int destSize),它将给定源字符串src中的字符复制到给定的目标缓冲区dest(大小为destSize),直到:
发生源字符串的结尾,或者目标缓冲区已满(允许需要的终结符),或者在输入字符串中找到空格字符
以先到者为准 . 如果由于找到空格而完成复制,则不会复制空间 . 必须始终正确终止目标字符串 . 如果源字符串的目标中没有足够的空间,则目标字符串必须是源字符串的正确终止的前导子字符串 .
返回值是复制的字符数,不包括终止空字节 .
在以下的形式进行测试的地方:
char buff[3];
int n = tokenCopy(buff, "This is a string", 3);
printf("%d '%s'\n", n, buff);
到目前为止这是我的代码:
#include <stdio.h>
int tokenCopy(char* dest, const char* src, int destSize){
int new_value = 0;
int i=0;
for (;*src != ' '; new_value++){
destSize = 1;
return new_value;
}
for (; *src != '\0' && *src!= ' '; new_value++)
{
while (i < destSize-1 && *src!= '\0'){
*dest = *src;
dest++;
src++;
new_value++;
i++;
*dest = '\0';
}
return new_value;
}
return new_value;
}
但是在以下测试的情况下:
char buff[10];
int n = tokenCopy(buff, " ", 10);
printf("%d '%s'\n", n, buff);
输出应该是:
0 ''
然而,我的代码输出零,然后是包含不同字母的语音标记,每次我尝试对代码进行更改时,在菱形中跟着一个问号 . 作为参考,我使用的是Geany IDE .
任何有关此问题的帮助将不胜感激 .
4 回答
您需要在函数内分配
dest
摆脱第一个
for
循环后,您可以修改第二个for
循环得到你想要的 . 修改包括
摆脱空字符串的冗余检查 .
结合复制值和指针增量
将目标长度检查添加为循环本身的终止条件
甚至是函数实现的第一个循环
没有意义 .
该功能可以通过以下方式编写
程序输出是