gpt4 book ai didi

c - C中的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:53 25 4
gpt4 key购买 nike

我正在尝试解决一个 C 问题,我必须使用指针对 n 个字符串进行排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sort (char *s, int n)
{
int i,j; char aux[]="";
for (i=1;i<=n-1;i++)
{
for (j=i+1;j<=n;j++) //if s[i]> s[j] switch
{
if (strcmp(*(s+i),*(s+j))==1)
{
strcpy(aux,*(s+i);
strcpy(*(s+i),*(s+j));
strcpy(*(s+j),*(s+i));
}
}
}

}

void show(char *s, int n)
{
int i;
for (i=1;i<=n;i++)
{
printf("%s",*(s+i));
}
}
int main()
{
int i,n; char *s;
printf("give the number of strings:\n");
scanf("%d",&n);
s=(char*)calloc(n,sizeof(char));
for (i=1;i<=n;i++)
{
printf("s[%d]= ",i);
scanf("%s",s+i);
}
sort(s,n);
show(s,n);


return 0;
}

我收到的警告是当我使用 strcmp 进行比较以及当我使用 strcpy 切换 *(s+i)*(s+j) 值。

"passing argument 2 of strcmp makes pointer from integer without a cast"

最佳答案

The warnings that I get are when I use strcmp to compare and when I use strcpy to switch
*(s+i) and *(s+j) values.

"passing argument 2 of strcmp makes pointer from integer without a cast"

你对 strcmpstrcpy 的参数是错误的。 strcmpstrcpy 的签名是

int strcmp(char *string1, char *string2); 
char *strcpy(char *dest, const char *src)

但是您正在向它传递 char 类型的参数。 (s+i)*(s+j)`中移除。应该是



if (strcmp((s+i), (s+j))==1)
{
strcpy(aux, (s+i));
strcpy((s+i), (s+j));
strcpy((s+j), (s+i));
}

另一个问题是您没有为指针 分配内存。对于字符,您可以将其声明为

 s = malloc ( (n + 1)*sizeof(char) );  

或简单地

 s = malloc ( n + 1 ); // +1 is for string terminator '\0'

关于c - C中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com