C修改函数参数和解除引用中的字符串

时间:2017-01-23 04:45:39

标签: c string dereference

这里有点新C,但这就是我正在做的事情。

void do_something(char* str){
  char *new = str[0]+1;
  printf("%s%s\n", *str, new);

}

int main(){
  char input[2];
  printf("Enter a two character string: \n");
  scanf("%s", input);
  do_something(&input);
}

这是do_something()

的预期输出
do_something("aa")
.
.
.
aaba

基本上在do_something()我想要打印取消引用的输入参数str,然后打印参数的修改版本,其中第一个字符使用ascii递增1。

我不确定我是否将正确的输入传递到main()函数内的函数中。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

  

我不确定我是否将正确的输入传递到main()函数内的函数中。

不,那是不正确的。

do_something(&input); //不正确,因为输入已经是字符串

您应该将参数传递为

do_something(input);

此声明看起来真的令人不安,而不是你想要的:

char input[2]; // this can only hold 1 char (and the other for NUL character)

你应该有更大的缓冲区,并且也为NUL字符分配,比如

char input[100] = ""; // can hold upto 99 chars, leaving 1 space for NUL
  

基本上在do_something()中我想打印取消引用的输入参数str,然后打印参数的修改版本,其中第一个字符使用ascii递增1。

你可以直接修改函数do_something内的字符串(并且不需要在其中创建另一个指针 - atm它是完全错误的)

void do_something(char* str){
    // char *new = str[0]+1;  // <-- remove this
    str[0] += 1;   // <-- can change the string passed from `main` directly here
    printf("%s\n", str);
}

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT Value FROM TABLE ORDER BY Value Desc