我试图弄清楚为什么这不起作用,但我不确定。
void main(void){
char* s = "aBCde F. hjiodhfvev, . efof Gh";
to_lower_case(s);
printf("%s",s);
}
函数to_lower_case()
只是一个随机函数,它的名字就是它的名字。我想这与声明为constant
的字符串有关。
答案 0 :(得分:2)
这是问题
char* s = "aBCde F. hjiodhfvev, . efof Gh";
字符串文字(引号中的字面值)是只读的。你无法修改它们。
您应该将其声明为
char s[] = "aBCde F. hjiodhfvev, . efof Gh";
答案 1 :(得分:1)
正确。以字符串文字形式提供的字符串是只读的。您需要先将字符串复制到可变内存:
char* s_readonly = "foobar";
size_t s_length = strlen( s_readonly );
char* s_mutable = malloc( s_length + 1 );
assert( s_mutable );
errno_t err = strcopy_s( s_mutable, s_length, s_readonly );
assert( err == 0 );
to_lower_case( s_mutable );
puts( s_mutable );
free( s_mutable );
char[n]
类型,可以使此代码更简单。这样做的好处是允许静态sizeof()
工作,O(1)
比strlen
更快O(n)
。printf("%s\n", s)
可以替换为puts
,速度更快,因为没有要解析的格式字符串。strcopy_s
使用strcopy
。始终检查返回的错误代码!free
之后致电malloc
。如果您正在处理短字符串,则可以使用alloca
代替free
更快,并且不需要使用char s_mutable[] = "foobar";
to_lower_case( s_mutable );
puts( s_mutable );
。或者,就是这样:
s_mutable
这里的优势(除了简洁性)是sizeof( s_mutable ) == 12
可以立即变异,这意味着$q="SELECT
COUNT(pro_likes.product) AS likes
FROM pro_likes
LEFT JOINT products
ON pro_likes.product = products.pro_id";
$r=mysqli_query($con,$q);
$r1=mysqli_fetch_assoc($r);
echo $r1['likes'];
。