我收到一条错误,指出调用'strcpy_s'的参数太少 我查了一下,找不到任何答案!感谢您的帮助。
#include <stdio.h>
#include <string.h>
#define WORD_LENGTH 20
void read_line(char str[], int n);
int main(void)
{
char smallest_word[WORD_LENGTH];
char largest_word[WORD_LENGTH];
char current_word[WORD_LENGTH];
printf("Enter word: ");
read_line(current_word, WORD_LENGTH);
strcpy_s(smallest_word, strcpy_s(largest_word, current_word));
while (strlen(current_word) != 4);
{
printf("Enter word: ");
read_line(current_word, WORD_LENGTH);
if (strcmp(current_word, smallest_word) < 0)strcpy_s(smallest_word, 20, current_word);
if (strcmp(current_word, largest_word) > 0)strcpy_s(largest_word, 20, current_word);
}
printf("\nSmallest word: %s \n", smallest_word);
printf("Largest word: %s \n", largest_word);
return 0;
}
void real_line(char str[], int n)
{
int ch, i = 0;
while ((ch = getchar()) != '\n')
if (i < n)
str[i++] = ch;
str[i] = '\0';
}
答案 0 :(得分:1)
strcpy和strcpy_s没有相同的签名。如果您没有提供足够大的目标缓冲区,前者将覆盖内存,如果源字符串太大,则后者将返回错误代码。
检查here
char * strcpy ( char * destination, const char * source );
errno_t strcpy_s(char *restrict dest, rsize_t destsz, const char *restrict src);
因此,strcpy_s需要一个目标缓冲区大小,以确保它不会溢出。
答案 1 :(得分:0)
答案 2 :(得分:0)
protected def registry: Seq[aClass: Class[A], serializer: Serializer[A]] = ...
def optionals = Seq("field3")
final def register(kryo: Kryo) = {
optionals.foreach { optional =>
kryo.getContext.asInstanceOf[ObjectMap[Any, Any]].put(optional, true) }
registry.foreach { registrable => kryo.register(registrable.aClass, registrable.serializer) }
}
还需要strcpy_s
参数,请参阅:
size_t
答案 3 :(得分:0)
对于初学者这个功能
void real_line(char str[], int n)
{
int ch, i = 0;
while ((ch = getchar()) != '\n')
if (i < n)
str[i++] = ch;
str[i] = '\0';
}
错了。如果退出循环后i
将等于n
此赋值语句
str[i] = '\0';
尝试在字符数组外写字。
该功能可以通过以下方式定义
int real_line( char s[], int n )
{
int ch, i = 0;
if ( !( n < 1 ) )
{
while ( i < n - 1 && ( ch = getchar() ) != '\n' ) s[i++] = ch;
str[i] = '\0';
}
return i;
}
对于错误消息,函数strcpy_s
需要三个参数,而且它不返回类型char *
的指针。因此这些陈述
strcpy_s(smallest_word, strcpy_s(largest_word, current_word));
//...
if (strcmp(current_word, smallest_word) < 0)strcpy_s(smallest_word, 20, current_word);
if (strcmp(current_word, largest_word) > 0)strcpy_s(largest_word, 20, current_word);
}
错了。函数strcpy_s
按以下方式声明
errno_t strcpy_s(char * restrict s1, rsize_t s1max, const char * restrict s2);
您需要的是函数strcpy
。在这种情况下,您确实可以编写例如
strcpy(smallest_word, strcpy(largest_word, current_word));