读取单独的字符串时C分段错误

时间:2017-03-08 01:37:11

标签: c segmentation-fault

我正在尝试制作一个以名字 姓氏读取的C程序,有时它可能包含一个中间名。换句话说,我可能会读取两个或三个字符串,具体取决于输入。

期望输出:

姓氏,后跟逗号,跟随第一个名字的首字母,或者在中间名称的情况下,包括名字首字母和中间名字首字母。

示例:

输入:

John Smith

John David Smith

John D. Smith

输出:

Smith, J.

Smith, J. D.

Smith, J. D.

我的尝试:

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

#define size 20
#define max size*4
int main()
{
    char name[max];
    char first[size];
    char mid[size];
    char last[size];
    int read;

    /* Read the full name string*/
    fgets(name, max, stdin);
    /* 'read' returns number of variables read */
    read = sscanf(name, "%s %s %s", first, mid, last);
    /* If we only read first name and last name */
    if (read == 2) printf("%s, %s", mid, first[0]);
    /* 'read' should be 3 if we read all three variables */ 
    if (read == 3) printf("%s, %s %s", last, first[0], mid[0]);

    return 0;
}

当我运行它时,它给了我分段错误。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的第二个和最后一个打印输出值是字符,而不是字符串,因此请使用%c代替%s;

if (read == 2) printf("%s, %c", mid, first[0]);
if (read == 3) printf("%s, %c %c", last, first[0], mid[0]);