在c语言中用assert检查strncpy的函数



我需要编写c程序来比较两个字符串,而不使用strncpy((,然后在另一个函数中检查它是否与使用assert((一起工作

在我的代码中,通过使用指针assert(*str2 == *"comp");进行检查,我只检查第一个字母,而不检查其他字母。因此,即使有另一个以c开头的单词,它也会起作用。

char initialize_n(char str1[], char str2_n[], int n)
{
//initialize a string from the (at most) n first characters of another string
int i = 0;
for(i = 0; i < n; i++)
{
str2_n[i] = str1[i];
}
str2_n[i] = ''; 
}
void test_initialize_n(){
char str1[100] = "computer";
char str2[100];
initialize_n(str1, str2, 4);
assert(*str2 == *"comp");
}

如何正确地使用assert进行检查?

因此,如果没有gcc扩展,您就无法将其放入断言主体,因为这样做的函数对您来说是被禁止的。

你需要做的是编写自己的比较函数并调用它

int prefix_equals(const char *left, const char *right, int nleft, int nright)
{
if (nleft != nright) return 0;
/* Use the same for loop here you have in initialize_n */
if (left[i] != right[i]) return 0;
return 1; /* If you got all the way through they're equal */
}
assert(prefix_equals(str2, "comp", 4, 4));

根据我的经验,这种最有用的形式实际上有两个长度的自变量,可以使调用者避免调用点中的一些丑陋。这在assert级别上似乎是错误的,但当你达到几千行时,它并没有错。

相关内容

  • 没有找到相关文章

最新更新