昨天,我进行了单元测试。程序之一是复制字符串并找出没有字符串功能的长度。这是我写的代码:
#include <stdio.h>
int main(){
char str1[100], str2[100] = {'a'};
printf("Enter a string\n");
fgets(str1, sizeof(str1), stdin);
int i;
for(i = 0; str1[i] != '\0'; i++){
str2[i] = str1[i];
}
str2[i] = '\0';
printf("Copied string = %s", str2);
printf("Length of string = %d", i-1);
}
Run Code Online (Sandbox Code Playgroud)
我有一个相当令人惊讶的观察!即使添加了注释str2[i] = '\0'
,该字符串也将正确打印,即,'a'
在初始化中没有多余的,据我所知,不应将其覆盖。
评论后str2[i] = '\0'
,我希望看到以下输出:
test
Copied string = testaaaaaaaaaaaaaaaaaaaaaaaaaaa....
Length of string = 4
Run Code Online (Sandbox Code Playgroud)
这是输出:
test
Copied string = test
Length of string = 4
Run Code Online (Sandbox Code Playgroud)
如何str2
正确打印?编译器可以识别字符串的复制并静默添加空终止符吗?我正在使用gcc,但是clang也会产生类似的输出。
重现步骤:
我收到的 Google Play 商店通知是:
{
"version": "1.0",
"packageName": "package.name",
"eventTimeMillis": "111111111111",
"subscriptionNotification": {
"version": "1.0",
"notificationType": 4,
"purchaseToken": "purchase token",
"subscriptionId": "first_subscription"
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用订阅 get api时,我得到:
{
"startTimeMillis": "1635472371631",
"expiryTimeMillis": "1635472675112",
"autoRenewing": false,
"priceCurrencyCode": "EUR",
"priceAmountMicros": "4300000",
"countryCode": "IN",
"developerPayload": "",
"cancelReason": 1,
"orderId": "GPA.3388-8947-4636-69596",
"purchaseType": 0,
"acknowledgementState": 0,
"kind": "androidpublisher#subscriptionPurchase"
}
Run Code Online (Sandbox Code Playgroud)
如果我既没有混淆的ExternalAccount id 也没有要查询的linkedPurchaseToken,我该如何识别用户?
我想制作一个不输入任何内容并返回上一个星期一的日期的程序。(我不在乎时区。我只担心公历)。我正在使用Howard Hinnant的日期。这是我目前正在做的事情:
#include <iostream>
#include <date/date.h>
int main() {
auto todays_day = date::year_month_weekday(date::floor<date::days>(std::chrono::system_clock::now()));
auto todays_date = date::floor<date::days>(std::chrono::system_clock::now());
int offset = 0;
auto weekday = todays_day.weekday();
if(weekday == date::Tuesday)
offset = 1;
else if (weekday == date::Wednesday)
offset = 2;
else if (weekday == date::Thursday)
offset = 3;
else if (weekday == date::Friday)
offset = 4;
else if (weekday == date::Saturday)
offset = 5;
else if (weekday == date::Sunday)
offset = 6;
auto lastMonday = date::year_month_day(todays_date - date::days(offset));
std::cout …
Run Code Online (Sandbox Code Playgroud) 我正在制作图书馆管理软件.我有一个获取书籍信息的方法:
public static Book GetInfoAboutBook(string title)
{
using (SqliteConnection db = new SqliteConnection("Filename=" + fileName))
{
db.Open();
Book b = new Book();
SqliteCommand sqliteCommand = new SqliteCommand
{
Connection = db,
CommandText = "select Title, Author, Publisher, ISBN, Quantity, CoverImageLocation, Tags from MyBooks where Title = '@Title'",
};
sqliteCommand.Parameters.AddWithValue("@Title", title);
SqliteDataReader query = sqliteCommand.ExecuteReader();
if(query.Read())
{
b.Title = query.GetString(0);
b.Author = query.GetString(1);
b.Publisher = query.GetString(2);
b.Quantity = query.GetInt32(3);
b.CoverImageLocation = query.GetString(4);
b.Tags = query.GetString(5);
}
return b;
}
}
Run Code Online (Sandbox Code Playgroud)
无论输入是什么,'b'都不会被初始化.我确保所有输入实际上都存在于数据库中.但它不起作用.我调试了这个函数.query.Read()永远不会成功.这就是书对象保持为空的方式.这是Book类: …