从数组打印字符串

时间:2014-02-27 12:31:23

标签: c printf arrays

我知道如何编写Java,现在我正在尝试学习C编程。

我想从我创建的String Array中写出char,并在一行中写出每个String(我正在创建一个控制台应用程序)

到目前为止,我已经得到了这个;

int main()
{
    int i;
    int j;
    char aarhus[] = {'\x8F','r','h','u','s',' ','H','\0'};
    char esbjerg[] = {'E','s','b','j','e','r','g','\0'};
    char stationer[] = {*aarhus,*esbjerg};
        for (j=0;stationer[j] != '\0';j++) {
            printf("%c\n", stationer[j]);
        }
    return 0;
}

包含在顶部当然。 但是当我启动程序时,它只会写ÅEEsbjerg而不是ÅrhusEsbjerg(两者都在一条线上,就像我想要的那样)。如果我在\0中添加stationer[],我得到的就是ÅE在同一行。我一直试图解决这个问题几个小时,但到目前为止还没有。我希望你能提供帮助。提前致谢

4 个答案:

答案 0 :(得分:1)

你可能正在寻找这样的东西:

int main()
{
   int j;
   char aarhus[] = {'\x8F', 'r', 'h', 'u', 's', ' ', 'H', '\0'};
   char esbjerg[] = {'E', 's', 'b', 'j', 'e', 'r', 'g', '\0'};
   char* stationer[] = {aarhus, esbjerg, 0};
   for(j = 0; stationer[j] != 0; j++) 
   {
      printf("%s", stationer[j]);
   }
}

或者这个:

int main()
{
   int j;
   char aarhus[] = {'\x8F', 'r', 'h', 'u', 's', ' ', 'H', '\0'};
   char esbjerg[] = {'E', 's', 'b', 'j', 'e', 'r', 'g', '\0'};
   char* stationer[] = {aarhus, esbjerg};
   int count = sizeof(stationer) / sizeof(char*);
   for(j = 0; j < count; j++) 
   {
      printf("%s", stationer[j]);
   }
}

答案 1 :(得分:1)

更改

 char *stationer[] = {aarhus,esbjerg};

并使用

 printf("%s", stationer[j]);

答案 2 :(得分:1)

您的代码存在很多问题。

C中的数组未终止。您的循环for (j=0;stationer[j] != '\0';j++) {似乎假设stationer包含字符'\ 0',但您的定义不包含它。

其次,您的程序目前只打印stationer中包含的两个字符。您看到esbjerg数组的更多字符的事实是未定义行为的示例 - 您已经超过了数组的末尾,因此您正在阅读(和打印)垃圾。

此外,您还没有在printf格式中包含换行符'\n'字符。 printf不会像println那样自动执行此操作。

所以,总结一下:

int main()
{
    char aarhus[] = {'\x8F','r','h','u','s',' ','H','\0'};
    char esbjerg[] = {'E','s','b','j','e','r','g','\0'};

    /* An array of pointers to char. */
    char *stationer[] = {aarhus, esbjerg, NULL};

    int index = 0;
    /* Print each array of character as a string "%s": */
    for (index = 0 ; stationer[index] != NULL; ++index) {
            printf("%s", stationer[index]);
    }
    return 0;
}

最后但并非最不重要的是,如果您的语言环境支持,printf将正确处理'Å'。

答案 3 :(得分:0)

这应该有效:

printf("%s", aarhus);
printf("%s", esbjerg);

因为你没有添加\n,所以它们应该打印在同一行。

关于你的提前终止,我认为stationer的初始化是有原因的。 你应该尝试这样的事情(你想仔细检查考虑\0\n等的尺寸:

// Allocate a new string 
unsigned char * stationer = malloc(sizeof(aarhus)+sizeof(esbjerg) -1); // -1 for the extra \0
// Copy your 1st string
memcpy(stationer, aarhus, sizeof(aarhus));
// Append the second
memcpy(stationer + sizeof(aarhus), esbjerg, sizeof(esbjerg));
// print it
printf("%s", stationer);