【问题标题】:Trouble with argv and charargv 和 char 的问题
【发布时间】:2013-07-27 19:17:26
【问题描述】:

两个小时以来,我一直在尝试修改我的程序以给它参数 (argv) 而不是字符。

所以,这是我当前的代码:

int i;
 char ret[81];
    *ret = 1;
    for (i = 0; i < argc; i++)
    { 
            ret[0] = '\0';
          strcat(ret,argv[i]);
    }

此代码将所有 args 连接成一个 char,printf 返回的结果与我的旧 char 参数相同,但在我的代码中不起作用:

char test[] = "9...7....2...9..53.6..124..84...1.9.5.....8...31..4.....37..68..9..5.74147.......";
        solve(test); //working
        solve(ret); //not working

我的应用程序是这样启动的: ./a.out "9...7...." "2...9..53" ".6..124.." "84...1.9." “5.....8..” “.31..4...” “..37..68.” ".9..5.741" "47......."

Soooo,如果有人理解我的问题,我可能需要一些帮助:D

【问题讨论】:

  • 这个描述毫无意义。
  • ret[0] = '\0'; 移动到循环输出(而不是*ret = 1;)并开始i = 1
  • 这对我来说太愚蠢了,非常感谢......
  • @BLUEPIXY 改为发布答案。
  • 想详细说明一下?根据您的代码,它甚至会打印出任何内容供用户查看吗?但是您说您的代码不起作用,但是我认为您不应该在初始化时将 * 放在 ret 上,而且您已将其声明为字符(char),但是您为其分配一个整数(1)。您需要将其更改为 int 变量,并删除星号然后它可能会工作

标签: c char argv


【解决方案1】:

示例代码:

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

void solve(char *data){
    static const char *result = "9...7....2...9..53.6..124..84...1.9.5.....8...31..4.....37..68..9..5.74147.......";
    if(strcmp(result, data) == 0)
        printf("working\n");
    else
        printf("not working\n");
}

int main(int argc,  char *argv[]){
    int i, total_length = 0;

    for(i = 1; i < argc; ++i){
        total_length += strlen(argv[i]);
    }

    char ret[total_length + 1];

    ret[0] = '\0';
    for(i = 1; i < argc; ++i){
        strcat(ret, argv[i]);
    }
    char test[] = "9...7...."
                  "2...9..53"
                  ".6..124.."
                  "84...1.9."
                  "5.....8.."
                  ".31..4..."
                  "..37..68."
                  ".9..5.741"
                  "47.......";
    solve(test);
    solve(ret);

    return 0;
}

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2013-02-02
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多