在C

时间:2016-05-25 02:55:23

标签: c arrays debugging

这是该计划的第一部分,我有一些关于其部分工作原理的问题。请记住,这是我编写的第一个C程序。的scanf( “%d”,&安培; numberOfTimes);为什么我需要&它做了什么? char input [] [200];这基本上是一个字符串数组还是完全不同的东西?

#include <stdio.h>
#include <string.h>
char outputs[100];
char input[][200];
int numberOfTimes;

void io(void){
    scanf("%d", &numberOfTimes);
    for(int i = 0; i < numberOfTimes; i++){
        scanf("%s",input[i]);
    }
}

代码的下一部分是我尝试实际解决问题但我怀疑我搞砸了函数的使用,但我不知道哪一个或我使用了一些不正确的东西才能得到这个结果。 (我在底部提供了代码的示例i / o)。

void stringManipulation(char string[200]){
    int strLength = strlen(string);
    int number = strLength/2;
    for(int i = 0; i <= number; i=i+2){
        strcat(outputs,&string[i]);
    }
}



int main(void) {
    io();
    for(int i = 0; i < numberOfTimes; i++) {
        stringManipulation(input[i]);
        printf("%s\n",outputs);
        memset(&outputs[0], 0, sizeof(outputs));
    }
    return 0;
}

我是否正确使用了memset?我再次不理解&amp;。

的使用

示例输入:

4

your

progress

is

noticeable

预期产出:

y

po

i

ntc

我得到的输出:

yourur

progressogressress

is

noticeableticeableceable

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

变量之前的&表示您指的是变量的地址,而不是变量值本身。如果您不知道变量的地址是什么:http://www.cquestions.com/2010/02/address-of-variable-in-c.html

char input[][200]是一个char数组的数组(一个char数组被粗俗化为一个字符串,但它是ISN&#39; TYPE)。

您的问题与strcat使用有关,您添加string[i](已包含)和string[strLength]之间的字符,而不仅仅是string[i]字符。

答案 1 :(得分:1)

你的问题出现在strcat:

您的代码会传递地址,因此您将从该角色获取整个字符串。

strcat(outputs,&string[i]);

现在,更改上面的代码如下:

strcat(output,string[i]);

您将获得所需的输出。初始代码的问题在于您传递的是地址而不是单个字符。 另外,更改for循环的方式是&#34;&lt;&#14; number而不是&#34;&lt; =&#34; number。 如果您有任何疑问,请告诉我。