我听说使用正则表达式验证电子邮件地址是一件坏事,它实际上可能会造成伤害.这是为什么?我认为验证数据永远不会是件坏事.如果您正确执行验证,可能不必要,但绝不是坏事.你能解释一下为什么这是对还是错?如果它可能造成伤害,请举个例子.
考虑以下代码:
#include<stdio.h>
int main()
{
const char* c = malloc(1);
*c = 'a';
printf("%c\n",*c);
}
Run Code Online (Sandbox Code Playgroud)
该代码显然会引发以下编译错误:
file1.c:7:3: error: assignment of read-only location ‘*c’
*c = 'a';
^
Run Code Online (Sandbox Code Playgroud)
如何在堆内存中初始化const变量?
是否可以使用for循环在C中获取所有基本数据类型的大小?例如,我们可以这样做吗?
#include <datatypes.h> /* or something else which defines get_data_types() */
#include <stdio.h>
int main() {
for (int x = 0; x < len(get_data_types()); x++) {
printf("Size of %s is %d", get_data_types()[x], sizeof(get_data_types()[x]));
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过替换for循环并为int,long等编写单独的语句来枚举所有数据类型.但是,我想知道是否有可能有一个for循环来做同样的事情?
基本上,我试图避免以下情况:
#include <stdio.h>
int main() {
printf("Size of int is %d", sizeof(int);
printf("Size of unsigned int is %d", sizeof(unsigned int);
printf("Size of long is %d", sizeof(long);
/* etc. */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数据类型的兴趣 - ,char,unsigned char, …
我知道segfault是未定义行为的常见表现。但是我对此有两个小问题:
所有的段错误都是未定义的行为吗?
如果否,是否有任何方法可以确保出现段错误?
什么是细分错误?比我的问题更笼统,没有答案能回答我的任何问题。
我认为输出应该是 10 10,但它是 10 1 并且不知道为什么。
我尝试分配 arr[0]=55 ,它使我成为 55 idk 为什么会这样。很高兴得到解释
void foo(int arr[])
{
int i=10;
arr=&i;
printf("%d",arr[0]);
}
int main()
{
int a[4]={1,2,3,4};
foo(a);
printf("%d",a[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的想法:1010 实际 o/p= 101
#include <iostream>
#include <string>
#include <vector>
#include "Player.h"
using namespace std;
void PlayerMenu();
int main() {
int z;
cout << "Please press 0 to see the PLayers Menu. " << endl;
cin >> z;
while (z == 0) {
PlayerMenu();
}
cout << " Now You're Functional Lets get started. ";
};
void PlayerMenu()
{
char ch;
int num;
do {
system("cls");
cout << "\n\n\n\t Player Menu";
cout << "\n\n1 Wallet Balance ";
cout << "\n\n2 Player Invetory";
cout << …Run Code Online (Sandbox Code Playgroud) 我想输出数据看起来像这样
input : 1999.99
output: 999.99
Run Code Online (Sandbox Code Playgroud)
我想去掉更重要的数字。
我已经使用过这样的 C 格式
%.2f ==> 10.44, 23.23, 5.67
Run Code Online (Sandbox Code Playgroud)
现在我需要在小数点前切割。
有什么解决办法吗?
假设我们有一个字符串,我们想以相反的顺序打印它。在这种情况下,递归似乎是更快的选择,因为字符串被“遍历”一次,而通常的循环方法会“遍历”两次。
对于这类问题,有什么理由不喜欢递归?在大输入的情况下,递归是否会造成某种不利?
考虑以下代码:
#include <stdio.h>
#include <string.h>
void printReverse_1(const char *str)
{
if (!*str)
return;
printReverse_1(str + 1);
putchar(*str);
}
void printReverse_2(const char *str)
{
const char *tmp = str + strlen(str) - 1;
while (tmp > str)
{
putchar(*tmp--);
}
putchar(*tmp);
}
int main(void)
{
printReverse_1("abc");
putchar('\n');
printReverse_2("abc");
putchar('\n');
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我知道这char[]比String密码更可取,因为它String是不可变的。但是我一直无法弄清楚如何将它传递给准备好的语句。考虑这个代码:
Connection con = MyDBManager.connect();
PreparedStatement stm = con.prepareStatement(
"INSERT INTO my_table(username, password) VALUES(? ?)");
String username = "Jonny";
stm.setString(username);
char[] password = new char[] {'a','b','c','d'};
stm.SetString(password.toString());
Run Code Online (Sandbox Code Playgroud)
它有效,但我怀疑调用会password.toString()破坏使用 a 的全部目的char[],那么我该怎么办?
是的,我知道密码不应该以明文形式存储。密码是散列的,但我仍然想使用char[]
这似乎有效,而且我还将数据库中的字段从 更改text为bytea并且(我认为)理论上应该提供与char[]预期相同的好处,但我强烈感到我做得不对:
byte[] password = new byte[] {'a','b','c','d'};
stm.SetBytes(password);
Run Code Online (Sandbox Code Playgroud)
也许我的方法完全错误,但我的要求是密码哈希永远不应存在于不可变对象中。我对将其发送到数据库的其他方式持开放态度PreparedStatement
我从@rzwitserloot 的回答中学到了很多东西,但不幸的是它没有帮助。永远不要在不可变对象中使用密码哈希是不可协商的要求。