【问题标题】:printing a value of an array of strings in c在c中打印字符串数组的值
【发布时间】:2013-11-05 05:16:50
【问题描述】:

所以我已经这样声明了我的字符串 键[25][50];值[25][50];

我有一个先前的字符串,我将其拆分为空格,然后将值分别存储到键/值数组中。我想当我想将一个字符串分配给数组中的一个位置然后通过 printf() 打印出该值时,问题就来了;它始终为空。我在分配字符串或打印方面做错了吗?

strcpy(buff, buf);
bufcopy = strtok(buff, " ");
if (strcmp(job, "PUT") == 0) {
    //keys[i] = bufcopy;
    strcpy(keys[i], bufcopy);
    printf("server received: %s", keys[i]);
    i++;
}

【问题讨论】:

  • printf("bufcopy: %s", bufcopy); 会显示什么?
  • 它显示了正确的字符串。由于某种原因,复制字符串会导致它为 null 或其他值..
  • 发布真实代码。您是说它在 this exact 代码中显示“正确的字符串”?如:printf("bufcopy: %s", bufcopy); 正上方 printf("server received: %s", keys[i]); ??发布一个展示您行为的完整示例。假设声明(不在代码中并且在问题中没有 typed )是正确的,那么唯一合乎逻辑的事情就是 buff 被声明为指针而不是缓冲区,并且再次,如果没有 real 代码,我也无法得出结论。

标签: c string variable-assignment cstring


【解决方案1】:

如果我错了,请纠正我,但您似乎正在尝试读取像这样的输入:

PUT key value

从命令行并将这些键/值对保存在您的数组中

char keys[25][50];
char values[25][50];

如果这是你想要完成的:

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

int main(){
  int i = 0;
  char keys[25][50];
  char values[25][50];
  char buf[256], *bufcopy;
  do{
    fgets(buf, 255, stdin);
    bufcopy = strtok(buf, " ");
    if (strcmp(bufcopy, "PUT") == 0) {
      bufcopy = strtok(NULL, " ");
      strcpy(keys[i], bufcopy);
      bufcopy = strtok(NULL, " ");
      strcpy(values[i], bufcopy);
      printf("server received pair %d - Key: %s\tValue: %s\n", i, keys[i], values[i]);
      i++;
    }
  }while(i<25);
  return 0;
}

这将读取输入,直到您到达键/值数组的末尾并将它们保存到您的数组中。您必须连续调用 strtok() 以在每个空格处拆分并获取指向下一个单词的指针(直到下一个空格)。有关其工作原理的更多信息,请查看strtok() 的参考。

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2012-07-26
    • 2017-06-26
    • 2020-03-13
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多