问题打印字符串

时间:2014-11-13 21:20:05

标签: c string

我们今天在课堂上做了这个练习,但不幸的是,我的代码运行不正常。它不会打印string1。我的老师也无法弄清楚为什么会这样。

#include <stdio.h>
#include <stdlib.h>

void main()
{
char string1[20];
char string2[] = "It is almost end of semester!";
size_t idx;
int size;

printf("Enter string1:\n");
scanf_s("%s", string1);
size = sizeof(string2) / sizeof(char);
printf("\nString 1 is : %s\n\n", string1);
for (idx = 0; idx < size; idx++)
{
    printf("%c ", string2[idx]);
}
puts("");
system("pause");;
}

2 个答案:

答案 0 :(得分:1)

scanf_s需要额外的参数。

scanf_s("%s", string1, _countof(string1));

答案 1 :(得分:0)

您使用scanf_s代替scanf,正如林奇先生正确指出的那样需要额外的参数。您可以使用scanf本身完成相同的操作。一种方法如下:

#include <stdio.h>
#include <stdlib.h>

int main () {
    char string1[20];
    char string2[] = "It is almost end of semester!";
    size_t idx;
    int size;

    printf ("Enter string1:\n");
    scanf ("%[^\n]%*c", string1);
    string[19] = 0;                            /* force null-termination of string1 */
    size = sizeof (string2) / sizeof (char);
    printf ("\nString 1 is : %s\n\n", string1);
    for (idx = 0; idx < size; idx++) {
        printf ("%c ", string2[idx]);
    }
    puts ("");
    return 0;
}

<强>输出:

$ ./bin/strprn
Enter string1:
scanf_s is not scanf

String 1 is : scanf_s is not scanf

I t   i s   a l m o s t   e n d   o f   s e m e s t e r !

注意: main()类型为int而不是void,无论您使用什么ms都可以逃脱。它也返回一个值。