赋值使得指针来自整数而没有强制转换,反之亦然

时间:2016-09-02 16:21:15

标签: c pointers integer

我试图编写一个获取字符串和数字的程序,并计算它的长度并将所有元素移位。
我有2个错误:
1.assignment从没有强制转换的整数中生成指针 2.assignment在没有强制转换的情况下从指针生成整数。

#include <stdio.h>
#include <string.h>
#define N 10

int myStrlen(char*);
void shiftRight(char*, int);

int main() {
    char str[N] = {0};
    int num = 0;
    int len;
    /* input of the string */
    scanf("%s",str);
    scanf("%d",&num);
    len=myStrlen(str);


    if(num>=0) {
         shiftRight(str, num);
         printf("%s\n",str);
    }
    else
    {
        printf("%s\n", str);
    }


    return 0;
}

int myStrlen(char*str)
{
    int my_len=0;
    while (str[my_len] != '\0')
    {
        my_len++;
    }
    return my_len;
}



void shiftRight(char* str, int num)
{
    int i;
    char* j;
    int count;
    j=(str[N-1]);
    for(count=0;count<num;count++)
    {
        for(i=N-1;i>0;--i)
        {
            str[i]=str[i-1];
        }
        str[0]=j;
     }
}

欢迎您的回答,如果您对此代码有任何不妥之处,请提及。

2 个答案:

答案 0 :(得分:0)

正如你的编译器告诉你的那样,没有强制转换的整数指针位于

j=(str[N-1]);

指针的整数位于

str[0]=j;

您应该将j声明为char j;

答案 1 :(得分:0)

  

但是现在当我运行它时,键入让我们将球称为字符串并将其称为1   作为一个数字,我从程序中得不到任何东西,而不是得到&#34; lbal&#34;

你拥有所有正确的元素,但这还不够。编写一个程序讲述一个故事,你需要设置场景,描述一路上发生的事情并完成你的叙述。一个故障元素的故事是无意义的,就像一个程序一样。

您的代码的具体问题:您保存最后一个字符(将其恢复到字符串的开头)是错误的地方;当你应该使用它的长度时你是否正在使用字符串的分配(并且方便地,你有一个功能!);这实际上更像是轮换而非轮班;使用最具描述性的变量名称,而不是最短的变量名称;选择一种缩进样式并坚持下去 - 它可以在您编写的程序之间进行更改,但不应在单个程序中进行更改。

以下是针对上述一些问题的代码修改:

#include <stdio.h>

#define STRING_SIZE 10

int myStrlen(char *string)
{
    int length = 0;

    while (string[length] != '\0')
    {
        length++;
    }

    return length;
}

void rotateRight(char *string, int number)
{
    int length = myStrlen(string);

    for (int count = 0; count < number; count++)
    {
        char j = string[length - 1];

        for (int i = length - 1; i > 0; i--)
        {
            string[i] = string[i - 1];
        }

        string[0] = j;
    }
}

int main()
{
    char string[STRING_SIZE] = {0};
    int number = 0;

    /* input of the string */

    scanf("%s", string);
    scanf("%d", &number);

    if (number > 0)
    {
        rotateRight(string, number);
        printf("%s\n", string);
    }
    else
    {
        printf("%s\n", string);
    }

    return 0;
}

<强>输出

% ./a.out
elephant
3
anteleph
%