如何修复从“char*”到“char”的赋值从指针生成整数而无需强制转换
我需要从用户输入中删除所有逗号。该代码正在工作,但它给“char*”中的“char”赋值时发出警告,使指针中的整数不带强制转换。我需要摆脱这个警告如何修复从“char*”到“char”的赋值从指针生成整数而无需强制转换,c,C,我需要从用户输入中删除所有逗号。该代码正在工作,但它给“char*”中的“char”赋值时发出警告,使指针中的整数不带强制转换。我需要摆脱这个警告 removeCommas(argv[1]); printf("%s", argv[1]); return 0; for(i=0; i<strlen(num); i++) { c = *(num + i); if(c == 44) {
removeCommas(argv[1]);
printf("%s", argv[1]);
return 0;
for(i=0; i<strlen(num); i++)
{
c = *(num + i);
if(c == 44)
{
*(num + i) = "";
}
}
return 0;
我不确定您在这里试图分配什么,但双引号表示char*
如果您想从字符串中删除ASCII 44,那么这不是一种方法。您需要在\0之后、直到\0之前移动所有字符,并正确终止字符串。您应该逐个字符地工作。在输入字符串上循环,搜索逗号,然后用字符串的剩余部分覆盖它:
#include "string.h"
#include "stdio.h"
int main()
{
char num[100];
strcpy(num, "abc,def,,a,");
unsigned int i;
char c;
for (i = 0; i < strlen(num); i++)
{
c = num[i];
if (c == ',')
{
if (num[i + 1] == '\0')
num[i] = '\0';
else
{
size_t s = strlen(num + i + 1);
memmove(num + i, num + i + 1, s+1);
--i;
}
}
}
printf("%s", num);
return 0;
}
请注意,如果要从字符串中删除所有COMA,则生成的字符串可能比源字符串短。C语言中没有真正的字符串类型——它只是字符数组 我认为,正确的方法是: 计算源字符串中的逗号数 计算结果字符串的长度并为其保留足够的内存 迭代源字符串的字符,如果它们不是逗号,则将它们复制到结果字符串
您可以共享完整的源代码吗?或者?从“char*”到“char”的警告赋值使指针中的整数不带强制转换,几乎应该始终视为错误。您可能需要查看该函数。不存在“无”这样的情况,实际上您希望从字符串中删除所有逗号。顺便说一句,不要写44,写','Google从字符串c中删除字符。因为你没有发布变量声明,所以这个问题无法回答。我只是想用空来替换逗号。@Muttaki c中没有这样的东西。我的意思是,你需要确定要被替换的字符,添加一个“j”变量,它只在不逗号时增加,并将写的内容从*num +j= *num + iNoT改为一个拷贝,在字符串的中间用“\\ 0”结尾。这将导致内存泄漏。@JakubSzułakiewicz字符串中的\0与内存泄漏有什么关系?你的意思是这个0之后的内存将不被使用吗?@ HyyBiLeCAT如何正确地为字符串保留空闲内存,如果你不知道它是真的长度,而终止字符是在它中间的?@ JabusSuu[AkeWiCz完全一样,如果你没有0,它会释放它。@ NavelPeling这个代码不能处理连续逗号。
#include "string.h"
#include "stdio.h"
int main()
{
char num[100];
strcpy(num, "abc,def,,a,");
unsigned int i;
char c;
for (i = 0; i < strlen(num); i++)
{
c = num[i];
if (c == ',')
{
if (num[i + 1] == '\0')
num[i] = '\0';
else
{
size_t s = strlen(num + i + 1);
memmove(num + i, num + i + 1, s+1);
--i;
}
}
}
printf("%s", num);
return 0;
}