【问题标题】:Printing an array in C在 C 中打印一个数组
【发布时间】:2016-04-11 10:47:18
【问题描述】:

我正在尝试更改然后打印 C 中的数组或至少第一个字符。当我声明数组时它正在工作。当我将它发送到另一个 void 时,它也会正确打印出来。但是,当我尝试更改它时,它会返回一个虚假值。这是我到目前为止的代码..

int main (void) {
  char value[] = "Halleluja";

  printf("The value is: %c\n", *value);
  printValue(value);
  printf("\nSecond value is: %c", *value);

  return 0;
}

void printValue(char *test[]) {

    printf("Before changing: %c", *test);

    *test = "G";
}

另外,我怎样才能将字符串打印为 %s 或不必循环遍历字符数组。比如,如果我想将“Halleluja”字符串更改为“Sandals”..

提前致谢!

【问题讨论】:

  • 所有空行是怎么回事?
  • 您希望*test = "G"; 做什么?设置一个字符等于一个字符串是什么意思?
  • 你不是在打印一个数组,你只是在尝试打印和更改一个值,它恰好是数组中的第一个元素。
  • 我正在尝试更改字符串。例如,*test = "Santa" 会将初始字符串更改为 Santa。
  • 最后一个关于你的函数命名的注释,一个名为printValue的函数应该只打印一个值,而不是修改它。对于像一个节目这样的小程序,你可以很容易地看到所有的节目,这可能并不重要,但好的命名是你应该在职业生涯早期学习的一个非常好的习惯。

标签: c arrays printing


【解决方案1】:

改变

void printValue(char *test[]) 

void printValue(char *test)

*test[] 是一个指针数组,但您实际上需要一个指针,因为您只传递一个字符串。

改变

*test = "G";

test = "G";

话虽如此,您的代码现在有多个问题,尽管语法上一切都很好。

如果我没记错的话,您实际上希望使用指针更改array 的内容。这是不可能的。

当你这样做时

test = "Sandals";

test 只是指向一块专门用于存储“凉鞋”的内存。更改value 值的安全方法是:

strncpy_s(array, sizeof(array), "Sandals", _TRUNCATE);

以上同:

strncpy_s(array, sizeof(array), "Sandals", sizeof(array)-1);

【讨论】:

  • 这样做了,它仍然在内存中打印出一个随机字符。在我的情况下,小写 f
  • 现在做到了!但这让我很困惑。不应该改变 *test (无论是在测试的内存地址)而不是测试(指向该地址的指针?)
  • 当涉及到字符串时,您可以使用左侧的指针(而不是指向的值)..
  • @WeTheFuzz :正如另一个答案中所指出的,将 printf("\nSecond value is: %c", *value); 更改为 ` printf("\nSecond value is: %c", value);` 。看来你已经这样做了。
【解决方案2】:

一些问题:

  1. 这个:

    void printValue(char *test[]) {
    

    应该是

    void printValue(char *test) {
    

    因为value(衰减后)是char*,而不是char**

  2. 这个:

    *test = "G";
    

    应该是

    *test = 'G';
    

    因为"G" 是字符串文字,但您需要字符文字'G'

如果我想将“Halleluja”字符串更改为“Sandals”怎么办

使用来自string.h的内置标准库函数strcpy

strcpy(value, "Sandals");

【讨论】:

  • 你是对的。 *测试应该保持原样。另外,现在我明白了从字符串文字到字符我做错了什么。谢谢大佬。
  • 另外,我该怎么做: printf("\nSecond value is: %c", *value); to printf("\n第二个值是:%s", *value);这并打印出整个字符串?
  • printf("\nSecond value is: %s", value);
  • 赞!再次感谢!
猜你喜欢
  • 2010-11-25
  • 2011-07-07
  • 2018-03-03
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多