【问题标题】:error: cast to 'string' (aka 'char *') from smaller integer type 'int' [-Werror,-Wint-to-pointer-cast]错误:从较小的整数类型“int”转换为“字符串”(又名“char *”)[-Werror,-Wint-to-pointer-cast]
【发布时间】:2021-01-20 18:18:38
【问题描述】:

这是我的代码:

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

bool is_valid_key(string s);

int main(int argc, string argv[])
{
    if (argc != 2 || !is_valid_key(argv[1]))
    {
        printf("Usage: ./ceaser key\n");
        return 1;
    }
    string P = get_string("Plaintext:");
    int s = strlen(P);
    int c[100];

    for(int i = 0; i < s; i++)
    {
        c[i] = ((int)P[i] + argc) ;
        //printf("argc=%d\n",argc);
        printf("P[%d]=%d\n",i,P[i]);            // for testing purpose
        printf("C[%d]=%s\n\n",i,(string)c[i]);  // for testing purpose`enter code here`
        //printf("\n\n\n");
    }
    printf("C1:%s\n",(string)c);
    return 0;
}

bool is_valid_key(string s)
{
    for (int i = 0; i < strlen(s); i++)
    {
        char ch = s[i];
        if (!isdigit(ch))
        {
            return false;
        }
    }
    return true;
}

错误:clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow caeser.c -lcrypt -lcs50 -lm -o caeser caeser.c:52:33: error: cast to 来自较小整数类型“int”的“字符串”(又名“字符 *”) [-Werror,-Wint-to-pointer-cast] printf("C[%d]=%s\n\n",i,(string)c[i]);

我想你可能知道cs50课程中的caeser主题,所以我正在处理这段代码,我得到了这个错误,我真的不知道如何解决它,如果你知道,请告诉我,真的很有帮助。

【问题讨论】:

  • edit您的问题包括错误的完整完整复制粘贴。还请在您获得它的代码中包含注释。
  • 错误信息是指哪一行?
  • c[i]int 类型。转换它不太可能将其转换为指向 char 数组的有意义的指针,这是 %s 所期望的。
  • 你想要%d而不是%s

标签: c string pointers cs50


【解决方案1】:

这两行有问题:

printf("P[%d]=%d\n",i,P[i]);            // for testing purpose
printf("C[%d]=%s\n\n",i,(string)c[i]);  // for testing purpose`enter code here`

首先,您使用%d 格式打印char,然后将其打印为int

然后在第二行中,您尝试使用%s 格式打印int 值,该格式用于字符串。

要解决您的问题,请更改为正确的printf formnat 说明符,不要进行强制转换:

// Note different format here
//             v
printf("P[%d]=%c\n",i,P[i]);            // for testing purpose
printf("C[%d]=%d\n\n",i,c[i]);  // for testing purpose`enter code here`
//             ^
// Note different format here, as well as no casting needed

【讨论】:

  • 我认为还有另一个打印语句需要修复:printf("C1:%s\n",(string)c);
  • 那么有没有其他方法可以解决我的问题 bcoz 如果不进行强制转换,那么我将无法获得准确的输出
  • @ChristianGibbons 我应该做哪些修改?
  • @Sushmitashukla 你想完成什么?你想要的输出是什么?
  • @Someprogrammerdude 访问这个链接:cs50.harvard.edu/x/2020/psets/2/caesar,你会知道我想要什么输出......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2019-12-07
  • 2015-06-04
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多