c - 为什么我的程序不打印名字的首字母? (CS50 缩写程序)

标签 c arrays initializer-list cs50

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>

int main(int argc, string argv[])
{
int i=0;
int x=0;
int n=0;

    argv[i]=GetString()
    printf("%c", toupper(argv[i][0]));
    for (x=0, n=strlen(argv[i]); x<n; x++)
    {
        printf("%c", toupper(argv[i+1][0]));
    }
    printf("\n");
}

代码可以编译,但不会打印用户输入的姓名的首字母缩写。例如,约翰·史密斯:JS。相反,我收到了段错误。

这个程序是CS50的initials.c。

最佳答案

虽然您没有显示 GetString() 的定义,但我很确定您没有正确调用它,因为它后面没有分号,而且您几乎肯定不想这样做覆盖argv[0]。使用调试符号(GCC 中的 -g)进行编译并在调试器中运行将告诉您哪一行代码导致了程序崩溃。

编辑:我的猜测是,当您尝试取消引用 argv[i+1](即 argv[1])时,您会崩溃code>,一个NULL指针。但在调试器中运行可以确认或否定这一点。您似乎将循环参数列表的语法与从标准输入读取行的语法混淆了。

关于c - 为什么我的程序不打印名字的首字母? (CS50 缩写程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683608/

相关文章:

ios - 在for循环后按值对字典数组进行排序?

c++ - 初始化列表的简单示例

C++11 值初始化器与列表初始化器

c++ - 我是否应该始终声明比我的字符串大的 char 数组?

c - "space bar"之后扫描字符终止的问题

java - 是否可以将javascript值分配给html并使用Jsp获取该值?

java - 无法垂直检测 connect 4 win

c++ - 构造函数应该初始化类的所有数据成员吗?

c - 从管道读取时循环未完成

c - 使用 printf,将两个字符串左右对齐到给定长度